【发布时间】:2021-01-01 01:25:57
【问题描述】:
我们正在使用 Angular SPA 客户端构建一个 ASP.net 核心 Web API。对于身份验证,我们已经使用多租户实现了 Azure AD。对于 Web API 身份验证/授权,我们遵循this Microsoft sample。这使用 Microsoft.Identity.Web MSAL 库来验证源自 Angular SPA 的授权代码。在 Azure AD 应用程序注册中,我们管理应用程序的正确范围,但我们无法理解如何管理声明。
在以前的应用程序中,我在我的应用程序中将身份验证服务器 IdentityServer4 作为中间件运行,从而允许在我的应用程序中进行身份验证和发出声明。我正在使用UserManager 添加或删除对用户的声明。索赔信息存储在我的数据库的用户表中,然后包含在发布的 cookie 中,可供 SPA 和 Web API 使用。
在当前的应用程序中,我们完全依赖 Azure AD,现在我觉得我在管理用户声明(以及它们包含在 cookie/令牌中)的过程中遗漏了一部分。 问题:当用户管理和身份验证发生在 Azure AD 而不是我的应用程序中时,如何管理特定于我们的应用程序的声明?
澄清一下:This Microsoft document 提到了三种使用应用程序角色的方法:Azure AD 应用程序角色、Azure AD 安全组和应用程序角色管理器。这是我认为的最后一个是我需要的正确功能:
使用这种方法,应用程序角色根本不会存储在 Azure AD 中。相反,应用程序将每个用户的角色分配存储在自己的数据库中——例如,使用 ASP.NET Identity 中的 RoleManager 类。
一小部分我已经查看但没有给我答案的文档:
-
This previously linked Microsoft document 确实提到在 ASP.NET Identity 中使用 RoleManager 类,但没有解释如何将其实现为与 Azure AD 的集成,以便 cookie/令牌包含角色(或角色转换为声明)。
-
我已经阅读了有关使用 MS Graph schema extensions 和 including these in claims 的信息,但是,该文章还指出,任何 应用程序在同意的情况下都可以读取和写入这些扩展属性。暗示这不是向应用程序提供任何声明的安全方式,因为可以从应用程序外部触及这些值
-
Documentation 解释如何验证用户声明。
-
Tailspin scenario,提到在应用程序上使用角色而不是安全组。但没有任何迹象或暗示如何将其作为声明包含在 Azure AD 中。并且跟随this 很明显它不受应用程序的控制。
-
This document 和 this 解释了转换声明或添加自定义声明,但这是用户帐户的基础条件,而不是设置声明的应用程序。这些条件也需要在域而不是应用程序中进行管理。
-
Similar question?但没有答案。
【问题讨论】:
标签: asp.net-core azure-active-directory