2012-04-14 8 views
0

私は以下のスニペットのようなコード(http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/から取られた)のWindowsアイデンティティ基盤(WIF) - ClaimsAuthenticationManager

public class Transformer : ClaimsAuthenticationManager 
{ 
    public override IClaimsPrincipal Authenticate(string endpointUri, IClaimsPrincipal incomingPrincipal) 
    { 
     var claimName = "customClaimType"; 
     // expensive operation 
     var claimValue = [from expensive operation]; 

     incomingPrincipal.Identities[0].Claims.Add(new 
      Claim(claimName, claimValue)); 

     return incomingPrincipal; 

    } 
} 

を持っているとの記事(http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/)で、ドミニクは、我々はしたくない場合は、と指摘リクエストごとにこれらの(高価な)クレームをデータストアから取得し、SAM(SessionAuthenticationModule)を使用することができます。しかし、この主張がすでにアイデンティティーに存在するかどうかを確認し、それが存在しない場合にのみ主張をフェッチすることができますか?これはパフォーマンスの問題を解決しないでしょうか?

public class Transformer : ClaimsAuthenticationManager 
{ 
    public override IClaimsPrincipal Authenticate(string endpointUri, IClaimsPrincipal incomingPrincipal) 
    { 
     var claimName = "customClaimType"; 
     if(incomingPrincipal.Identities[0].Claims.Where(x => x.ClaimType == claimName).Count() <= 0) 
     { 
      // expensive operation 
      var claimValue = [from expensive operation]; 

      incomingPrincipal.Identities[0].Claims.Add(new 
       Claim(claimName, claimValue)); 
     } 

     return incomingPrincipal; 

    } 
} 

我々はSessionAuthenticationModuleに頼る必要があり、なぜ私は理解していません。だから私はローカルマシン上で上記のコードを試して、私はそれ以降の要求(最初のものの後)、高価な操作が呼び出されないことを確認するために踏んだ。今はロードバランシング環境(Webファーム)や、単一サインオン構造を共有する複数の信頼関係者が関与する真のフェデレーショングループの場合にはわかりません。

私はこれをより良く理解するのに役立つ説明に感謝します。

ありがとうございます! Karthi。

答えて

0

Dominickの記事を誤解しました。彼の記事は、あなたの目的のためにWIFのSessionAuthenticationModuleを使用することに関するものでした。 WIF w/ws-Fedを使用している場合は、この動作をそのまま使用できます。

私はそれを明確にすると考えていました。

0

あなたは自分の質問に真摯に答えたと思います。 Dominickのアプローチとの単純な違いは、追加の "http:// claim/expensive"クレームがセッションクッキーにキャッシュされていることですが、提案されたソリューションではそうではありません。

関連する問題