使用id_token,ADFS 2016和react-adal

时间:2018-12-14 13:57:15

标签: reactjs adal.js adfs4.0

我有一个客户端应用程序,正在通过ADFS和react-adal进行身份验证,并且我的大多数应用程序都可以正常工作,但似乎找不到请求访问令牌的方法(因此刷新令牌) )和id_token,这就是我从ADFS获得的全部回报。

目前,React应用将用户转发到ADFS进行登录,然后对令牌进行身份验证,我希望能够从/ adfs / userinfo获取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"
}

1 个答案:

答案 0 :(得分:0)

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

here中描述了一种解决方法,可能会有所帮助。

本质上,将GET更改为POST。