【问题标题】:Roles based api call --using azure ad access token or id token?基于角色的 api 调用——使用 azure 广告访问令牌或 id 令牌?
【发布时间】:2022-01-31 21:05:46
【问题描述】:

我有一个与后端 REST API(java spring boot)通信的 Angular 应用程序。此 REST API 专门用于为 SPA 提供服务。为了在主页之外导航或使用 SPA 的任何功能,用户必须先登录。

问题是API调用的访问是基于角色的。在 azure 中,我们将映射声明添加到 ID 令牌,以便我们可以获取员工 ID。我们使用 msal 来获取令牌。现在我们需要在角度拦截器中传递令牌。

const headers = request.headers.set('Authorization', `Bearer ${result.idToken}`);

该应用程序正在运行,但我对此没有信心。我错了吗?我应该改用访问令牌吗?如果我用访问令牌替换 id 令牌,例如

 const headers = request.headers.set('Authorization', `Bearer ${result.accessToken}`);

然后我从后端收到 401 错误。

【问题讨论】:

  • 似乎认为使用访问令牌调用 Rest WebAPI 更安全:code-maze.com/secure-angular-calls-to-webapi-using-access-token
  • 承载身份验证方案最初是作为 OAuth 2.0 的一部分创建的,并且访问令牌由身份验证服务器作为 OAuth2.0 流程的一部分发布。因此,如果您像这样传递带有 ID 令牌的 Bearer ${result.idToken} ,它将引发错误的授权标头错误或包含无效的承载令牌,并且服务器可能会以 401(未授权)状态码进行响应
  • ID 令牌仅假设用户经过身份验证而不调用 API 以获取更多信息,您可以阅读此博客以了解不同的 btwn ID 令牌和访问令牌:auth0.com/blog/id-token-access-token-what-is-the-difference

标签: azure-active-directory authorization msal bearer-token


【解决方案1】:

Id Token 来自OpenID connect,Access Token 来自Oauth2.0

承载身份验证方案最初是作为 OAuth 2.0 的一部分创建的,并且访问令牌由身份验证服务器作为 OAuth2.0 流程的一部分发布。因此,如果您像这样传递带有 ID 令牌的 Bearer ${result.idToken} ,它将引发错误的授权标头错误或包含无效的承载令牌,并且服务器可能会以 401(未授权)状态码进行响应。

ID 令牌仅用于了解用户已通过身份验证并获取用户配置文件数据。所以,ID 令牌不适合调用 API。

访问令牌用于访问资源并检查是否允许客户端访问某些内容。

有关 ID 令牌调用 API 不安全的更多信息,您可以参考此blog

【讨论】:

  • 感谢您的意见。但问题是我用 ID 令牌通过了Bearer ${result.idToken},那很好。如果我通过 Bearer ${result.accessToken} 则抛出 401 错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2021-10-30
  • 2021-11-12
  • 2018-01-01
  • 2023-02-02
  • 2017-10-11
  • 2020-08-20
相关资源
最近更新 更多