私は以下のスニペットのようなコード(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。