2012-04-14 9 views
0

У меня есть код, подобный приведенному ниже фрагменте кода (из 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; 

    } 
} 

И в статье (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. Поэтому я попробовал вышеуказанный код на своей локальной машине, и я прошел через него, чтобы проверить, что для последующих запросов (после первоначального) дорогостоящая операция не вызывается. Теперь я не уверен, будет ли это иметь место в среде с балансировкой нагрузки (веб-ферма) или в действительно объединенной группе, в которой задействованы несколько полагающихся сторон, разделяющих структуру единого входа.

Я очень благодарен за объяснение, которое поможет мне лучше понять это.

Спасибо! -Karthi.

ответ

0

Я неправильно понял статью Доминика. Его статья заключалась в использовании WA SessionAuthenticationModule для ваших целей. Если вы используете WIF w/WS-Fed, вы получаете это поведение из коробки.

Просто подумал, что я проясню это ...

0

Я думаю, что вы ответили на свой собственный вопрос. Простая разница с подходом Доминика заключается в том, что дополнительная претензия «http: // претензий/дорогих» кэшируется в cookie сеанса, но с предлагаемым решением это не так.

Смежные вопросы