2

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 を作成してチャネルを介して渡すことはできますか、それとも一般的にこれにアプローチするより良い方法はありますか?

4

1 に答える 1

0

Bootstraptoken は文字通り、WIF ID が最初に作成された元のトークンであるため、最初の作成後に追加または変換されたクレームは含まれません。WIF が (セキュリティで保護されたトークンを使用して) 機能する方法は、実質的に、呼び出し元のクライアントがトークンの内容をいかなる方法でも操作できないことを意味します (または、少なくとも受信者がそのような悪意のあるトークンを検証できないようにする必要があります)。

選択した IDM アーキテクチャに応じて、続行する方法についていくつかのオプションがあります。最も簡単なオプションは、STS をもう一度呼び出し、必要な追加クレームを RequestSecurityToken 要求で指定することです。ただし、着信クレームを受け入れるか拒否するかは STS の考慮事項であり、カスタム STS コードでこれを処理するための多数のオプションがあります。STS を制御できない場合 (および中間リピーターを設定できない場合) は、トークンのサポートなど、追加の WCF セキュリティを使用するのが難しい場合があります。これらは、WCF の道に沿ってさらに委任する場合は、手動の構成と操作が必要です。

ただし、ID 管理モデルは基本的に信頼関係のコレクションであり、STS クライアントがサイト全体 (またはトークンが配布/フェデレーション/その他の場所) で有効なクレームを指定できるようにすることで、かなり怪しい設計になっていることに注意してください。結局のところ、クレームは WCF 呼び出し元から来るため、まったく同じレベルのセキュリティで WCF メソッド呼び出しのパラメーターとして単純に渡すことができます。それらを WIF ID トークンに (適切に) 追加することによる唯一の利点は、ActAs/OnBehalfOf の状況でそれらが自動的に委任/共有されることです。

于 2012-08-10T18:47:03.963 に答える