Azure active directory 带有单页应用程序和ASP.Net核心web api的Azure广告:如何访问所有相关令牌?

Azure active directory 带有单页应用程序和ASP.Net核心web api的Azure广告:如何访问所有相关令牌?,azure-active-directory,claims-based-identity,msal,Azure Active Directory,Claims Based Identity,Msal,我们的应用程序是一个具有ASP.Net核心Web API的Angular SPA。身份由Microsoft identity Platform(Azure AD)提供,身份验证由该平台提供。授权是在Web API的基础上完成的。这些“应用程序角色”保存在Azure AD目录中(在应用程序清单中定义,并在租户域上分配给用户) 根据,Angular SPA从Azure接收令牌。发布的相关令牌包括:my Web API的AccessToken(如下所示)、调用Graph API的AccessToken

我们的应用程序是一个具有ASP.Net核心Web API的Angular SPA。身份由Microsoft identity Platform(Azure AD)提供,身份验证由该平台提供。授权是在Web API的基础上完成的。这些“应用程序角色”保存在Azure AD目录中(在应用程序清单中定义,并在租户域上分配给用户)

根据,Angular SPA从Azure接收令牌。发布的相关令牌包括:my Web API的
AccessToken
(如下所示)、调用Graph API的
AccessToken
(如下所示)和包含“应用程序角色”的
IdToken
声明(一旦分配了角色,该id令牌似乎会自动包括在内)

我面临的问题是,我需要将并发令牌传递给我的Web API,但使用HTTP拦截器,我只能在头请求中包含1个令牌。例如,我需要第一个
AccessToken
来证明对Web API的身份验证,并且我需要包含
IdToken
,以便Web API可以执行授权


Q:当这些令牌都被颁发给SPA并且需要包含在对我的Web API的HTTP调用中时,如何使用多个令牌调用我的Web API?

无论您是否希望获取Microsoft Graph数据,获取应用程序角色的方式都是不正确的

id令牌不能用于对Web API应用程序执行授权。您必须使用访问令牌。请参阅本文以了解id令牌和访问令牌的用法

因此,您必须使用访问令牌,而不是id令牌

在本例中,您将在Azure AD应用程序中配置应用程序角色,该应用程序代表Angular SPA(前端)


事实上,您应该在代表ASP.Net核心Web API(后端)的Azure AD应用程序中配置应用程序角色。然后,您可以在Web API的AccessToken中获得“应用程序角色”作为
角色
声明。

为什么要从Microsoft Graph API获取访问令牌?您想在ASP.Net核心Web API应用程序中获取图形数据吗?或者您只是想从Microsoft Graph获取id令牌?我计划在我的Web API.OK中访问Graph API。请按照我的建议回答。要调用API中的微软图,您应该考虑OBO AuthFuff::谢谢,我将查看OBO来访问图形API。OBO的示例项目:谢谢,我将在Web API注册上配置应用程序角色!Superman.Lopez np:)别忘了在测试期间为用户分配应用程序角色。已成功实现应用程序角色和代表调用Graph API,再次感谢您的帮助!