【发布时间】: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