我目前正在實施一個聯合身份驗證解決方案,使用: 一個被動STS用於發佈令牌,一個託管Silverlight應用程序的網站和Silverlight應用程序的WCF服務。ClaimsPrincipal在它到達WCF服務時爲空
到目前爲止我能:
- 重定向到STS
- 登錄並獲得通過訪問
HttpContext.Current.User.Identity as IClaimsIdentity;
重定向到網站
<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是一個有效的Principal被提供。
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中。
任何想法?