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
                });
            }
        }
}

我坚持的一点是第二个 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

0

这似乎是 adal.js 库的普遍问题。

此处描述的解决方法可能会有所帮助。

本质上,将 GET 更改为 POST。

于 2018-12-16T19:36:15.937 回答