使用组织帐户(多租户)向 ASP.NET MVC 添加自定义声明

Add custom claims to ASP.NET MVC with organizational account (multiple tenants)

是否可以在用户通过身份验证后向我的 ClaimsPrincipal 添加自定义声明?当对个人帐户使用 ASP.NET 身份时,可以在创建主体时向 ClaimsPrincipal 添加自定义声明,但在使用组织帐户模板时我找不到执行此操作的方法。

您确实需要让用户重新登录。

默认情况下,您的声明会被加密并作为单个 cookie 存储在您的浏览器中。操作完 ClaimsPrincipal 后,您需要将 cookie 保存回浏览器。

我同意措辞不好,但您必须执行以下操作

var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
var authenticationProperties = new AuthenticationProperties { IsPersistent = false };

authenticationManager.SignIn(authenticationProperties, myManipulatedClaimsIdentity);

对于组织帐户身份验证,模板设置 HTTP 处理程序来处理用户的身份验证。如果您查看 web.config,您会看到两个模块已添加到您的项目中,它们是 WSFederationAuthenticationModuleSessionAuthenticationModule。因此,与您习惯于对个人帐户使用基于 cookie 的身份验证相比,这是一种完全不同的身份验证和授权方式。

您正在寻找的扩展点是 Authenticate 方法 ClaimsAuthenticationManager。只需创建一个派生自此的 class 并覆盖 Authenticate 方法。这将使您能够访问经过身份验证的用户的 ClaimsPrincipal 对象,您可以在调用应用程序代码之前将用户的声明集合扩展到您想要的任何内容。

如何设置的示例是 here