0

以下のスニペットに似たコードがあります ( http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/から取得)

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/ ) で Dominick は、これらを取得したくない場合は次のように指摘しています。 (高価な) 要求ごとにデータ ストアからの要求を行う必要がある場合は、SAM (SessionAuthenticationModule) を利用できます。ただし、ID に対してこのクレームが既に存在するかどうかを確認し、存在しない場合にのみクレームをフェッチすることはできないでしょうか? これでパフォーマンスの問題は解決しませんか?

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 ファーム) に当てはまるのか、それともシングル サインオン構造を共有する複数の依存者が関与する真のフェデレーション グループに当てはまるのかはわかりません。

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

ありがとう!-カルティ。

4

2 に答える 2

0

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

于 2012-04-16T15:42:37.437 に答える
0

Dominick の記事を誤解していました。彼の記事は、目的のために WIF の SessionAuthenticationModule を使用することに関するものでした。WS-Fed で WIF を使用している場合は、すぐにこの動作が得られます。

私はそれをクリアすると思った...

于 2012-04-19T14:20:31.497 に答える