【发布时间】:2012-08-06 22:53:51
【问题描述】:
我想从 WCF 服务访问添加到 UI 层中当前主体的自定义声明。 我有一个 Web 应用程序,一旦用户通过 STS 身份验证,就会向 CurrentPrincipal 添加声明。这很好用。
protected void WSFederationAuthenticationModule_SecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs args)
{
var customPrincipal = new ClaimsPrincipal(args.ClaimsPrincipal);
var service = ServiceLocator.Current.GetInstance<IServices>();
Thread.CurrentPrincipal = customPrincipal;
var result = service.GetPemissions();
foreach (var claim in result.Claims)
customPrincipal.Identities.First().Claims.Add(new Claim(claim.ClaimType, claim.Value));
Thread.CurrentPrincipal = customPrincipal;
args.ClaimsPrincipal = customPrincipal;
}
在某个时候,我想向 WCF 服务发出请求,并将声明传递给该服务。如果我使用 CreateChannelActingAS 传入引导令牌,我不会得到上一步添加到主体的声明。
var claimsPrincipal = Thread.CurrentPrincipal as IClaimsPrincipal;
var securityToken = claimsPrincipal.Identities.First().BootstrapToken;
using (var channel = channelFactory.Value.CreateChannelActingAs(securityToken) as IClientChannel)
{
try
{
invocation.ReturnValue = invocation.Method.Invoke(channel, invocation.Arguments);
{ ...
是否有任何方法可以在 WCF 服务中构造 ClaimsPrincipal 并遇到在 UI 层中添加的其他声明?我可以创建一个新的 securityToken 并通过通道传递它,还是有更好的方法来解决这个问题?
【问题讨论】:
标签: wcf wif claims-based-identity