从ADFS 2016获取用户信息,进行反应,ADAL.js

时间:2018-12-18 11:37:26

标签: reactjs adfs adal.js adfs4.0

我已经在这个问题上停留了一段时间,我在前端使用ADAL.js来处理登录和身份验证。登录后,我需要获取用户的信息(角色,组,名称等...),但是我无法从/ adfs / userinfo端点获取除401之外的任何信息。

到目前为止,我已登录用户并获取与访问密钥相同的id_token和访问令牌(或浏览器中的“ adal.access.token.key {guid}”)。由于前端的cors问题,我将其发送到后端mvc core 2.2控制器,以调用/ adfs / userinfo,这是我在其中获取401的地方。

this.adalAuthentication.Instance.acquireToken(this.adalAuthentication.Instance.config.clientId, (error, token) => {
                    if (error || !token) {
                        console.log('ADAL Error Occurred: ' + error);
                        return;
                    }
                    axios({
                        method: 'get',
                        url: '/identity/completeLogin/' + token,
                        headers: {
                            'Authorization': 'Bearer ' + token
                        }
                    }).then((response) => { console.log(response.data) });

                });

还有控制器动作...

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

        response.EnsureSuccessStatusCode();
        try
        {
            response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
            return response;
        }
        catch (Exception e)
        {
            throw(e);
        }
    }

在这一点上,我很困惑,我想我要么不能为此使用ADAL,要么可能需要使用oidcin代替OAuth / jwt,但是我不想为了发现它而不得不重写很多东西都不起作用,或者有更好/最佳实践的方法。有没有人遇到过这个问题,并且/或者可以向我指出正确的方向,或者可以看到我要去哪里错了?

我尝试过的其他方法;

  • 击中adfs / oauth / token端点(仅在出现adfs服务器错误时返回)
  • 将后端的授权设置为client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer" + access_token);(只是返回无效的令牌)。
  • 使前端和后端具有post方法,并在ADAL AuthenticationContext上使用getCachedToken方法

编辑:我也有一个this问题,还有一个更具体的目标,即获得带有ID令牌的访问令牌

1 个答案:

答案 0 :(得分:1)

有一个邮递员样本here

请注意,“ userinfo”仅返回“ sub”声明。