0

ADFSとreact-adalで認証しているクライアント側アプリがあり、ほとんどが機能していますが、アクセストークン(したがってリフレッシュトークン)を要求する方法が見つからないようですid_token は、ADFS から返されるすべてです。

React アプリがサインインするためにユーザーを ADFS に転送する時点で、これはトークンを認証し、/adfs/userinfo エンドポイントからユーザー情報 (名前、姓、役割など) を取得できるようにしたいのですが、必要です。そうするためのベアラートークン。

現在、私の componentWillMount 関数は次のようになっています

componentWillMount = () => {
    axios.get('/home/AuthenticationContext').then((response) => {
        this.adalAuthentication = new AdalAuthentication(response.data);
        if (this.adalAuthentication.authenticateToken()) { // checks if authenticated with adfs, not app
            var error = this.adalAuthentication.Instance.getLoginError();
            if (error === "") {
                axios({
                    method: 'get',
                    url: '/identity/completeLogin/' + this.adalAuthentication.Instance.getCachedToken(this.adalAuthentication.Instance.config.clientId)
                }).then((response) => { console.log(response) })
                this.setState({
                    loggedIn: true
                });
            }
            else {
                this.setState({
                    error: error
                });
            }
        }
}

私が立ち往生しているポイントは、2 番目の axios get メソッドです。これは、同じオリジンのコントローラー アクションにヒットします。

    [HttpGet("completeLogin/{id_token}")]
    public async Task<IActionResult> CompleteLogin(string id_token)
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer" + id_token);
        var response = await client.GetAsync("https://adfs.domain/adfs/userinfo");

        return View();
    }

もちろん、応答は無許可で返されます。id_token からアクセス トークンを取得する方法、または Adal.js ライブラリを使用してフロント エンドで React からアクセス トークンを取得する方法に関する情報が見つかりません。

編集: id_token から取得した唯一の情報は以下のとおりです。

"userName":"bob@email.com",
"profile": {
    "aud":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "auth_time":1544777683,
    "exp":1544793006,
    "iat":1544789406,
    "iss":"https://adfs.domain/adfs",
    "mfa_auth_time":1544777705,
    "nonce":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "sid":"x-x-x-xx-xxxxxxxxxx-xxxxxxxx-xxxxxxxxxx-xxxx",
    "sub":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "unique_name":"T1234\\bob",
    "upn":"bob@email.com"
}
4

1 に答える 1