カスタムAuthenticationManagerを使用して追加のクレームを持つカスタムClaimsPrincipalを作成しています。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) で AJAX 要求に Web API を使用しています。現在の ClaimsPrincipal の内容が Cookie の内容によって上書きされていると思われますが、よくわかりません。カスタム クレームをタイプ セーフに取得するために、継承された ClaimsPrincipal を使用していません。プロセスのどこかで後で失われる新しいクレームを追加しているだけです。追加のクレームがリクエスト間で失われないように、カスタム ClaimsPrincipal を設定する適切な方法は何ですか?