현재 토큰을 발행하는 수동 STS, Silverlight 응용 프로그램을 호스팅하는 웹 사이트 및 Silverlight App 용 WCF 서비스를 사용하는 연합 인증 솔루션을 구현 중입니다.ClaimsPrincipal이 WCF 서비스에 도달하면 null입니다.
은 지금까지 나는 수 있어요 :
- 는 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>
또한 ClaimsAuthenticationManager 및 ClaimsAthorizationManager의 자체 구현을 사용하도록 web.config의 Microsoft.IdentityModel 섹션을 구성했습니다.
<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는 않습니다.
아이디어가 있으십니까?