一旦用户通过身份验证,有没有办法向我的ClaimsPrincipal添加自定义声明?在为个人帐户使用ASP.NET标识时,可以在创建主体时向ClaimsPrincipal添加自定义声明,但在使用组织帐户模板时无法找到执行此操作的方法。
答案 0 :(得分:2)
对于组织帐户身份验证,模板会设置HTTP处理程序以处理用户身份验证。如果查看web.config,您将看到添加到项目中的两个模块,即 WSFederationAuthenticationModule 和 SessionAuthenticationModule 。因此,与用于个人帐户的基于cookie的身份验证相比,它是一种完全不同的身份验证和授权舞蹈。
您正在寻找的可扩展性点是 ClaimsAuthenticationManager 的身份验证方法。只需创建一个派生自此的类并重写Authenticate方法。这样,您就可以访问经过身份验证的用户的 ClaimsPrincipal 对象,您可以在调用应用程序代码之前将用户的声明集合扩展到您想要的任何内容。
如何进行此设置的示例是here。
答案 1 :(得分:0)
您需要重新签名用户。
默认情况下,您的声明会被加密并存储为浏览器中的单个Cookie。在您操纵您的ClaimsPrincipal之后,您需要将cookie保留回浏览器。
我同意verbage是坏的,但是你必须做以下
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
var authenticationProperties = new AuthenticationProperties { IsPersistent = false };
authenticationManager.SignIn(authenticationProperties, myManipulatedClaimsIdentity);