我目前正在实施联合身份验证解决方案,其中包括:
使用被动STS发放令牌、托管Silverlight应用程序的网站以及为Silverlight应用程序提供WCF服务。
到目前为止,我已经能够:
- 被重定向到STS - 登录并被重定向到网站 - 通过访问
在网站的web.config中,我已经添加了两个所需的WIF模块(在IIS 7下)。
问题在于当我的ClaimsAuthorizationManager被调用时,context.Principal.Identity中不包含有效的带有声明的身份信息,Thread.CurrentPrincipal也是如此。有什么想法吗?
到目前为止,我已经能够:
- 被重定向到STS - 登录并被重定向到网站 - 通过访问
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>
我还配置了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只是在提供有效Principal情况下将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也是如此。有什么想法吗?