Я хочу получить доступ к пользовательским претензиям, добавленным к текущему основному пользователю в слое пользовательского интерфейса, из службы WCF. У меня есть веб-приложение, которое добавляет претензии к CurrentPrincipal, как только пользователь был аутентифицирован STS. Это прекрасно работает.Требования к доступу WIF ChannelActingAs от WCF
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 в токене bootstrap, я не получаю заявки, которые были добавлены в основную часть с предыдущего шага.
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 и передать это через канал или есть лучший способ приблизиться к этому в целом?