隐式授权流程中的ID令牌与访问令牌

时间:2019-10-19 01:22:16

标签: azure-active-directory msal.js

我想澄清一下如何在隐式授予流中使用ID令牌和访问令牌。 我有一个使用MSAL.js进行Angular打包和Web API的Angular SPA。该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-grant-flow

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

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

检查此部分 enter image description here

它首先调用AcquisitionTokenSlient,如果不可用,它将从缓存中获取令牌。 它调用了acquireTokenPopUp,它将获得针对特定范围的访问令牌,我不确定它是否会打开弹出窗口或在后台隐藏iframe的情况下获得令牌。但这肯定会获取访问令牌。永远无法使用ID令牌访问API。

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