reactjs - 从 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,但我不想重写很多东西只是为了找出不要么工作,要么有更好/最佳实践的方法。以前有没有人遇到过这个问题和/或可以指出我正确的方向或可以看到我哪里出错了?
我尝试过的其他事情;
- 命中 adfs/oauth/token 端点(只返回 adfs 服务器错误)
- 将后端的授权设置为
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer" + access_token);
(仅返回无效令牌)。 - 将前端和后端设为 post 方法并
getCachedToken
在 ADAL AuthenticationContext 上使用该方法
编辑:我也打开了这个问题,其目标是获得带有 id 令牌的访问令牌
解决方案
这里有一个 Postman 示例。
请注意,“userinfo”仅返回“sub”声明。
推荐阅读
- azure-ad-b2c - 如何删除 Azure DevOps 企业应用程序?
- java - 为什么会发生这种情况,我该如何纠正这个“错误”?
- r - 如何在漏斗图中固定大小但动态悬停文本?
- java - 从碎片按钮单击时如何获取下一个活动
- javascript - 有没有办法根据 LightningChart JS 中的点数据命名系列?
- sql-server - 使用 Entity Framework Fluent API 的带有 where 子句的唯一索引
- python - 从具有多个日期/价格列的数据框在 pandas 中创建一个面板
- python-3.x - 如何循环csv并写入新的xlsx
- r - 通过组变量有效地扩展 data.table 中的网格
- javascript - 从反应组件的 HTML 中删除“role=banner”?