我已经在这个问题上停留了一段时间,我在前端使用 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 令牌的访问令牌