2

我想澄清一下如何在隐式授权流程中使用 ID 令牌和访问令牌。我有一个使用 MSAL.js 的 Angular SPA 包和一个 Web API。API 不调用任何外部服务,例如 MSFT Graph。后端仅使用来自 JWT 的角色声明来为我们的 API 功能建立 RBAC 授权。

该文档说: https ://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens

id_tokens 作为 OpenID Connect 流的一部分发送到客户端应用程序。它们可以与访问令牌一起发送或代替访问令牌发送,并由客户端用于对用户进行身份验证。

ID 令牌应该用于验证用户是否是他们声称的用户并获取有关他们的其他有用信息 - 它不应该用于代替访问令牌进行授权。

此文档显示了一个身份验证流程,其中使用 ID 令牌而不是访问令牌调用 Web API: https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-implicit-授权流

此示例代码也发送 ID 令牌(调用自己的 Web API 示例): https ://github.com/Azure-Samples/active-directory-javascript-singlepageapp-dotnet-webapi-v2

示例后端根据发布它的应用程序的客户端 ID 验证 ID 令牌受众。

鉴于我们的 API 是令牌的唯一消费者,我们应该使用 ID 令牌还是访问令牌?

4

2 回答 2

0

一般来说,在使用 Microsoft 标识平台保护 API 时,客户端在发出 API 请求时应该使用访问令牌,而不是 ID 令牌。

于 2019-10-20T09:21:40.580 回答
0

检查这部分 在此处输入图像描述

它首先调用acquireTokenSlient,如果没有,它会从缓存中获取一个令牌,如果没有,它会调用acquireTokenPopUp,它将获取特定范围的访问令牌,我不确定它是否会打开一个弹出窗口或会在后台获取一个令牌带有隐藏的 iframe。但它肯定会获取访问令牌。永远不能使用 ID 令牌访问 API。

检查https://docs.microsoft.com/bs-latn-ba/azure/active-directory/develop/scenario-spa-acquire-token以获得更多说明

于 2019-10-21T14:05:55.580 回答