首页 > 解决方案 > 从 ADFS 2016、react、ADAL.js 获取用户信息

问题描述

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

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

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,但我不想重写很多东西只是为了找出不要么工作,要么有更好/最佳实践的方法。以前有没有人遇到过这个问题和/或可以指出我正确的方向或可以看到我哪里出错了?

我尝试过的其他事情;

编辑:我也打开了这个问题,其目标是获得带有 id 令牌的访问令牌

标签: reactjsadfsadal.jsadfs4.0

解决方案


这里有一个 Postman 示例。

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


推荐阅读