Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 隐式授权流中的ID令牌与访问令牌_Azure Active Directory_Msal.js - Fatal编程技术网

Azure active directory 隐式授权流中的ID令牌与访问令牌

Azure active directory 隐式授权流中的ID令牌与访问令牌,azure-active-directory,msal.js,Azure Active Directory,Msal.js,我想澄清一下如何在隐式授权流中使用ID令牌和访问令牌。 我有一个Angular SPA,使用MSAL.js作为Angular包和一个Web API。API不调用任何外部服务,如MSFT图形。后端仅使用JWT的角色声明来建立对API功能的RBAC授权 这份文件说: id_令牌作为OpenID连接流的一部分发送到客户端应用程序。它们可以随附发送,也可以代替访问令牌发送,客户端使用它们对用户进行身份验证 ID令牌应用于验证用户是否是他们声称的用户,并获取关于他们的其他有用信息-不应使用它来代替访问令

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

这份文件说:

id_令牌作为OpenID连接流的一部分发送到客户端应用程序。它们可以随附发送,也可以代替访问令牌发送,客户端使用它们对用户进行身份验证

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

此文档显示了一个身份验证流,其中使用ID令牌而不是访问令牌调用web API:

此示例代码也发送ID令牌(调用自己的Web API示例):

示例后端根据发出ID令牌的应用程序的客户端ID验证ID令牌访问群体


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

一般来说,当使用Microsoft Identity platform保护您的API时,客户端在发出API请求时应该使用访问令牌,而不是ID令牌。

一般来说,当使用Microsoft Identity platform保护您的API时,客户端在发出API请求时应该使用访问令牌,而不是ID令牌。

检查这部分

它首先调用acquireTokenSlient,如果可用,则从缓存中获取令牌 它调用acquireTokenPopUp,它将获得特定作用域的acces令牌,我不确定它是否会打开一个弹出窗口,或者在后台获得一个带有隐藏iframe的令牌。但它肯定会获取一个访问令牌。无法使用ID令牌访问API

检查更多说明

检查此部分

它首先调用acquireTokenSlient,如果可用,则从缓存中获取令牌 它调用acquireTokenPopUp,它将获得特定作用域的acces令牌,我不确定它是否会打开一个弹出窗口,或者在后台获得一个带有隐藏iframe的令牌。但它肯定会获取一个访问令牌。无法使用ID令牌访问API


检查文章和您链接到的示例中的更多说明

,您能指出ID令牌用于调用web API的特定部分(或引用)或文件和行吗?@PhilippeSignoret我运行了示例并检查了令牌。该示例告诉您通过将令牌访问群体设置为应用程序的客户端ID来验证令牌访问群体。只有ID令牌将aud声明设置为应用程序的客户端ID。在文章的图表中,它显示了在MSAL从片段中获取令牌后将令牌传递给Web API。默认情况下,MSAL将只获取ID令牌并将其发送到后端。访问令牌的
aud
声明将具有您的API的客户端ID(即API的应用注册的应用ID)。当您在前端和后端使用相同的应用程序注册时,这将仅是客户端的应用程序ID。在所有情况下,前端发送到API的令牌都是访问令牌,而不是ID令牌。MSAL不会向您的后端发出API请求。调用任何
acquireToken…
函数时,MSAL将向调用后端时应用程序代码使用的用户返回访问令牌。如果您能指出哪些文件/行建议您描述的内容,我们可以澄清这一部分。很抱歉,您的示例完全正确:它正在向API发送ID令牌。(我所说的access vs.ID token是准确的,我所说的sample正在做的事情是不准确的。)我将深入了解为什么sample会发送ID token(即,它是sample还是MSAL?)。在任何情况下,对您的问题的一般回答是,客户机应该向API发送访问令牌,而不是ID令牌。在本文和您链接到的示例中,您是否可以指向特定部分(或引用),或者ID令牌用于调用web API的文件和行?@PhilippeSignoret我运行了示例并检查了令牌。该示例告诉您通过将令牌访问群体设置为应用程序的客户端ID来验证令牌访问群体。只有ID令牌将aud声明设置为应用程序的客户端ID。在文章的图表中,它显示了在MSAL从片段中获取令牌后将令牌传递给Web API。默认情况下,MSAL将只获取ID令牌并将其发送到后端。访问令牌的
aud
声明将具有您的API的客户端ID(即API的应用注册的应用ID)。当您在前端和后端使用相同的应用程序注册时,这将仅是客户端的应用程序ID。在所有情况下,前端发送到API的令牌都是访问令牌,而不是ID令牌。MSAL不会向您的后端发出API请求。调用任何
acquireToken…
函数时,MSAL将向调用后端时应用程序代码使用的用户返回访问令牌。如果您能指出哪些文件/行建议您描述的内容,我们可以澄清这一部分。很抱歉,您的示例完全正确:它正在向API发送ID令牌。(我所说的access vs.ID token是准确的,我所说的sample正在做的事情是不准确的。)我将深入了解为什么sample会发送ID token(即,它是sample还是MSAL?)。在任何情况下,对您的问题的一般回答都是,客户机应该向API发送访问令牌,而不是ID令牌。您提供的链接与我的场景不同,因为我不请求user.read范围。不管流是否应该相同,您必须根据应用程序中的API范围或应用程序的资源ID请求它,具体取决于您使用的是ADAL还是MSALThe链接