我想从 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 并通过通道传递它,还是有更好的方法来解决这个问题?