具有单页应用程序和 ASP.Net 核心网络 api 的 Azure AD:如何访问所有相关令牌?
Azure AD with Single Page Application and ASP.Net core web api: how to access all relevant tokens?
我们的应用程序是一个 Angular 具有 ASP.Net 核心 Web API 的 SPA。身份由 Microsoft Identity Platform (Azure AD) 提供,身份验证由其提供。授权是在 Web API 基础 "Application Roles" 中完成的。这些“应用程序角色”保存在 Azure AD 目录中(在应用程序的清单中定义并在租户域上分配给用户)。
Angular SPA 根据 these instructions. The relevant tokens that are issued are: an AccessToken
for my Web API (following these instructions), an AccessToken
for calling Graph API (following the same instructions 接收来自 Azure 的令牌)和 IdToken
包含“应用程序角色”作为 roles
声明(此 ID分配角色后似乎会自动包含令牌)。
我面临的问题是我需要将并发令牌传递到我的 Web API,但是使用 HTTP 拦截器我只能在 header 请求中包含 1 个令牌。例如,我需要第一个 AccessToken
来证明对 Web API 的身份验证,我需要包含 IdToken
以便 Web API 可以执行授权。
问: 当这些令牌都发给 SPA 并且需要包含在 HTTP 调用中时,如何使用多个令牌调用我的 Web API到我的网站 API?
无论是否要获取Microsoft Graph数据,您之前获取Application角色的方式都不正确。
ID 令牌不能用于对您的 Web API 应用程序执行授权。您必须使用访问令牌。请参阅此 以了解 ID 令牌和访问令牌的用法。
因此您必须使用访问令牌而不是 ID 令牌。
在这种情况下,您在代表 Angular SPA(前面)的 Azure AD 应用程序中配置应用程序角色。
事实上,您应该在代表 ASP.Net Core Web API(后端)的 Azure AD 应用程序中配置应用程序角色。然后,您可以在 Web API.
的 AccessToken 中获得“应用程序角色”作为 roles
声明
我们的应用程序是一个 Angular 具有 ASP.Net 核心 Web API 的 SPA。身份由 Microsoft Identity Platform (Azure AD) 提供,身份验证由其提供。授权是在 Web API 基础 "Application Roles" 中完成的。这些“应用程序角色”保存在 Azure AD 目录中(在应用程序的清单中定义并在租户域上分配给用户)。
Angular SPA 根据 these instructions. The relevant tokens that are issued are: an AccessToken
for my Web API (following these instructions), an AccessToken
for calling Graph API (following the same instructions 接收来自 Azure 的令牌)和 IdToken
包含“应用程序角色”作为 roles
声明(此 ID分配角色后似乎会自动包含令牌)。
我面临的问题是我需要将并发令牌传递到我的 Web API,但是使用 HTTP 拦截器我只能在 header 请求中包含 1 个令牌。例如,我需要第一个 AccessToken
来证明对 Web API 的身份验证,我需要包含 IdToken
以便 Web API 可以执行授权。
问: 当这些令牌都发给 SPA 并且需要包含在 HTTP 调用中时,如何使用多个令牌调用我的 Web API到我的网站 API?
无论是否要获取Microsoft Graph数据,您之前获取Application角色的方式都不正确。
ID 令牌不能用于对您的 Web API 应用程序执行授权。您必须使用访问令牌。请参阅此
因此您必须使用访问令牌而不是 ID 令牌。
在这种情况下,您在代表 Angular SPA(前面)的 Azure AD 应用程序中配置应用程序角色。
事实上,您应该在代表 ASP.Net Core Web API(后端)的 Azure AD 应用程序中配置应用程序角色。然后,您可以在 Web API.
的 AccessToken 中获得“应用程序角色”作为roles
声明