ここ数日間、私は Windows ID 基盤について読んでいて、それがいかに優れていて柔軟性があり、.net 4.5 に組み込まれているのかについて読んでいました。何十ものAPI、ブログ投稿、ハウツーなどを調べたにもかかわらず、私の人生では簡単な実装を機能させることはできません。
私は Windows 認証のみを使用しており、プリンシパルを取得してそれに付随するクレームを表示できます (すべての例が終了するようです)。ただし、それらを有用なクレームに変換し、結果をキャッシュして、すべてのリクエストで変換が行われないようにしたいと考えています。
私のweb.configには次のものがあります:
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<system.identityModel>
<identityConfiguration>
<claimsAuthenticationManager type="SecurityProj.MyClaimsTransformationModule,SecurityProj" />
<claimsAuthorizationManager type="SecurityProj.MyClaimsAuthorizationManager,SecurityProj" />
</identityConfiguration>
</system.identityModel>
ただし、認証マネージャーが呼び出されることはありません。私がそれをある種の仕事に導くことができる唯一の方法は、追加することです:
protected void Application_PostAuthenticateRequest()
{
ClaimsPrincipal currentPrincipal = ClaimsPrincipal.Current;
ClaimsTransformationModule customClaimsTransformer = new MyClaimsTransformationModule();
ClaimsPrincipal tranformedClaimsPrincipal = customClaimsTransformer.Authenticate(string.Empty, currentPrincipal);
HttpContext.Current.User = tranformedClaimsPrincipal;
}
私のglobal.asax.csファイルに。最初のリクエストでは機能しますが、その後「安全なハンドルが閉じられました」というエラーが発生し、何が原因なのかわかりません。明らかにこれは正しい方法ではないので、ベストプラクティスまたは単純な作業プラクティスを知っている人はいますか? これは Windows 認証のためだけのものです。それ以上複雑なものは必要ありません。
キャッシングのために、私は使用しようとしていました:
SessionSecurityToken token = FederatedAuthentication.SessionAuthenticationModule
.CreateSessionSecurityToken(
currentPrincipal,
"Security test",
System.DateTime.UtcNow,
System.DateTime.UtcNow.AddHours(1),
true);
if (FederatedAuthentication.SessionAuthenticationModule != null &&
FederatedAuthentication.SessionAuthenticationModule.ContainsSessionTokenCookie(HttpContext.Current.Request.Cookies))
{
return;
}
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(token);
しかし、その部分についてもよくわかりません。変換の問題を最初に修正する必要があります。
どんな助けでも大歓迎です。ルックアップ/変換を呼び出す必要があり、Cookie セットが必要です。