2012-04-14 6 views
0

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.

Antwort

0

Ich missverstanden Dominicks Artikel. In seinem Artikel ging es darum, das SessionAuthenticationModule von WIF für Ihre Zwecke zu verwenden. Wenn Sie WIF mit WS-Fed verwenden, erhalten Sie dieses Verhalten standardmäßig.

Nur gedacht, dass ich das aufräumen würde ...

0

Ich denke, Sie haben Ihre eigene Frage tatsächlich beantwortet. Der einfache Unterschied zu Dominicks Ansatz besteht darin, dass der zusätzliche Anspruch "http: // Ansprüche/teuer" im Sitzungscookie zwischengespeichert wird, dies jedoch nicht mit Ihrer vorgeschlagenen Lösung.