В настоящее время я реализую решение федеративной аутентификации, используя: пассивную службу STS для выпуска токенов, веб-сайт, на котором размещено приложение Silverlight, и службы WCF для приложения Silverlight.
Пока я умею:
- Перенаправляйтесь на СТС
- Войдите и получите перенаправление на сайт
- Отобразите претензии на веб-сайте, зайдя
HttpContext.Current.User.Identity as IClaimsIdentity;
в web.config веб-сайта я добавил два необходимых модуля 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>
Я также настроил раздел Microsoft.IdentityModel файла web.config для использования моей собственной реализации 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 не содержит действительного удостоверения с утверждениями, как и Thread.CurrentPrincipal.
Любые идеи?