Ich habe Code ähnlich den Snippet unten (aus http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/)Windows Identity Foundation (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;
}
}
Und in dem Artikel (http://leastprivilege.com/2009/05/24/use-geneva-session-management-for-your-own-needs/), weist darauf hin, dass Dominick, wenn wir nicht wollen, diese (teuren) Ansprüche aus einem Datenspeicher bei jeder Anfrage abrufen, dann können wir das SAM (SessionAuthenticationModule) verwenden. Können wir nicht einfach prüfen, ob dieser Anspruch bereits für die Identität existiert und dann den Anspruch nur dann holen, wenn er nicht existiert? Würde dies nicht die Leistungsbedenken lösen?
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;
}
}
Ich verstehe nicht, warum wir auf das SessionAuthenticationModule zurückgreifen müssen. Also habe ich den obigen Code auf meinem lokalen Rechner ausprobiert und bin durchgegangen, um zu überprüfen, dass für spätere Anfragen (nach der ersten) die teure Operation nicht aufgerufen wird. Jetzt bin ich mir nicht sicher, ob dies in einer Load-Balanced-Umgebung (Web-Farm) oder in einer echten Verbundgruppe mit mehreren vertrauenden Parteien, die eine Single-Sign-On-Struktur verwenden, der Fall sein wird.
Ich würde wirklich eine Erklärung schätzen, die mir helfen würde, dies besser zu verstehen.
Danke! -Karthi.