Я хочу получить доступ к настраиваемым утверждениям, добавленным к текущему участнику на уровне пользовательского интерфейса, из службы WCF. У меня есть веб-приложение, которое добавляет утверждения в CurrentPrincipal после аутентификации пользователя службой STS. Это прекрасно работает.
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);
{ ...
Есть ли способ создать ClaimsPrincipal в службе WCF и получить дополнительные утверждения, которые были добавлены на уровне пользовательского интерфейса? Могу ли я создать новый securityToken и передать его по каналу, или есть лучший способ подойти к этому в целом?