我正在创建一个自定义ClaimsPrincipal ,它使用自定义AuthenticationManager具有附加声明。似乎在 ASP.NET 4.5 中AuthenticationManager不会自动调用,您必须手动调用它。我在PostAuthenticateRequest中看到了建议您执行此操作的帖子。我的代码在 Global.asax 中如下所示:
protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e)
{
System.Web.HttpContext.Current.User =
FederatedAuthentication.FederationConfiguration.IdentityConfiguration.ClaimsAuthenticationManager.Authenticate("none",
System.Web.HttpContext.Current.User as ClaimsPrincipal);
}
我正在使用带有 cookie 的表单身份验证。当 PostAuthenticateRequest 被触发时,当前主体被正确设置。问题是当下一个请求进入 ASP.NET Web API 时,自定义声明会丢失。我在单页应用程序 (SPA) 中使用 Web API 处理 AJAX 请求。我怀疑当前 ClaimsPrincipal 中的内容被 cookie 中的内容覆盖,但我不确定。我没有使用继承的 ClaimsPrincipal 来对自定义声明进行类型安全的检索。我只是在添加新的声明,这些声明随后在过程中的某个地方丢失了。设置自定义 ClaimsPrincipal 的正确方法是什么,以便额外的索赔不会在请求之间丢失。