Azure AD Msal 拦截器访问令牌

Posted

技术标签:

【中文标题】Azure AD Msal 拦截器访问令牌【英文标题】:Azure AD Msal Interceptor Access Token 【发布时间】:2021-12-28 02:08:39 【问题描述】:

我正在使用 azure MSAL 来验证我的 API,但问题是我正在使用 DevExtreme 自定义存储进行服务器端分页。

Msal Interceptor 工作并为 HttpClient 自动生成令牌,但在这种情况下,我不通过 h​​ttp 发送请求。

如果我使用登录后获得的访问令牌,则会发生错误无效签名,如果使用 IdToken,则 401 我该如何解决此问题。

MSALInterceptorConfigFactory:

protectedResourceMap.set('https://localhost:44379/api/approveMilestones', ['api://cb343c76-cd5b-4af6-8229-014b2522adab/access_as_user']);

我获取 accessToken 和 IdToken 的登录响应

this.authService.loginPopup()
  .subscribe((response: AuthenticationResult) => 
    AuthenticationHelper.setToken(response.accessToken);
    this.router.navigate(['/payments-approval']);
  );

I'm getting accessToken and IdTOken both in result but these are not working if i send them with request for Bearer

【问题讨论】:

如果您检查jwt.ms 的访问令牌,“aud”(受众)值是多少? aud 值与我的 clientID 相同 好吧,这听起来是对的。您的后端身份验证是如何配置的? 后端身份验证很好,我对其进行了测试,但问题是我没有处理某些 API 的 http 请求。 有什么方法可以让我们从浏览器获取不记名令牌? 【参考方案1】:

在向服务器发送请求时,跨域时范围为空。您可以从小角度创建自己的拦截器,然后您可以在开发模式下注入代码。

先将token存入localStorage:

localStorage.setItem ('token', result.token);

向服务器发送请求时,从浏览器获取令牌

const token = localStorage.getItem (‘token'); 并使用这样的请求发送令牌。

阅读更多here。

【讨论】:

以上是关于Azure AD Msal 拦截器访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Azure AD MSAL 库将角色包含到访问令牌中

使用 Angular 8 中的 MSAL 库获取 Microsoft Azure AD 组名称列表

如何修复“访问令牌来自错误的受众或资源。”尝试使用 MSAL 令牌访问 Azure 的 REST api 时

如何使用 MSAL.js 为 Azure DevOps 获取有效的 AAD v2 令牌

如何使用MSAL.js为Azure DevOps获取有效的AAD v2令牌

iframe 中的 Azure AD MSAL