UI レイヤーの現在のプリンシパルに追加されたカスタム クレームに WCF サービスからアクセスしたいと考えています。ユーザーが STS によって認証されると、CurrentPrincipal にクレームを追加する Web アプリケーションがあります。これはうまくいきます。
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 を作成してチャネルを介して渡すことはできますか、それとも一般的にこれにアプローチするより良い方法はありますか?