gpt4 book ai didi

wcf - ClaimsPrincipal 在到达 WCF 服务时为 null

转载 作者:行者123 更新时间:2023-12-04 14:40:56 26 4
gpt4 key购买 nike

我目前正在使用以下方法实现联合身份验证解决方案:用于颁发 token 的被动 STS、托管 Silverlight 应用程序的网站和 Silverlight 应用程序的 WCF 服务。

到目前为止,我能够:

  • 重定向到 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 只是设置 Thread.CurrentPrincipal 是否提供了有效的委托(delegate)人。

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 也不包含。

有什么想法吗?

最佳答案

您不需要设置 Thread.CurrentPrincipal,因为 session 模块会为您做这件事。您将需要通过 HttpContext.Current.User 访问它,因为 Thread.Principal 通常设置在与访问服务的线程不同的线程上,因为它是 IIS 中的两个不同模块。我们在即将出版的书中有一个这样的例子,您可以在我们的 Codeplex Site 查看。 .

HTH

关于wcf - ClaimsPrincipal 在到达 WCF 服务时为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3450206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com