現在、トークンを発行するためのパッシブSTS、SilverlightアプリケーションをホストするWebサイト、およびSilverlightアプリのWCFサービスを使用してフェデレーション認証ソリューションを実装しています。
これまでのところ私はできる:
- STSにリダイレクトされます
- ログインしてWebサイトにリダイレクトされます
- アクセスしてWebサイトにクレームを表示します
HttpContext.Current.User.Identity as IClaimsIdentity;
Webサイトのweb.configに、必要な2つのWIFモジュールを追加しました(IIS 7で)
<modules runAllManagedModulesForAllRequests="true">
<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler"/>
<add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler"/>
</modules>
また、web.configのMicrosoft.IdentityModelセクションを構成して、ClaimsAuthenticationManagerとClaimsAthorizationManagerの独自の実装を使用しました。
<service name="Rem.Ria.PatientModule.Web.WebService.PatientService">
<claimsAuthenticationManager type ="Rem.Infrastructure.WIF.RemClaimsAuthenticationManager"/>
<claimsAuthorizationManager type ="Rem.Infrastructure.WIF.RemClaimsAuthorizationManager"/>
</service>
私のClaimsAuthenticationMAnagerは、単にThread.CurrentPrincipalを設定するだけで、有効なプリンシパルが提供されます。
class RemClaimsAuthenticationManager : ClaimsAuthenticationManager
{
public override IClaimsPrincipal Authenticate ( string resourceName, IClaimsPrincipal incomingPrincipal )
{
if ( incomingPrincipal.Identity.IsAuthenticated )
{
Thread.CurrentPrincipal = incomingPrincipal;
}
return incomingPrincipal;
}
}
}
問題は、ClaimsAuthorizationManagerが呼び出されたときに、context.Principal.IdentityにClaimsを含む有効なIdentityが含まれておらず、Thread.CurrentPrincipalも含まれていないことです。
何か案は?