2015-03-05 5 views
2

Я использую Kentor HttpModule в приложении на основе WebForms. Мне нужно получить дополнительную информацию, указанную с помощью loggin. Я не уверен, но я думаю, что Kentor анализирует только атрибутID = «userId», и мне нужно получить еще несколько атрибутов.Как использовать Kentor AuthService для получения дополнительных атрибутов утверждения

Нужно ли использовать вилку и изменять Kentor, чтобы иметь эти значения в моем приложении или они где-то хранятся.

Я вижу коллекцию xmlElements, возвращаемую методом AllAssertionElementNodes в Saml2Response, но я не знаю, как получить к ним доступ в приложении.

Для доступа ID я использую этот метод расширения:

public static string GetNameID(this IIdentity identity) 
    { 
     var claimsIndentity = identity as ClaimsIdentity; 

     if (string.IsNullOrWhiteSpace(claimsIndentity) 
     { 
      return string.Empty; 
     } 

     var providerQuery = from c in claimsIndentity.Claims 
          where c.Type.EndsWith("/identity/claims/nameidentifier") 
          select c.Value; 

     var provider = providerQuery.FirstOrDefault(); 

     return provider; 
    } 

И это:

if (User.Identity.IsAuthenticated) 
{ 
    userId = User.Identity.GetNameID(); 
} 

Любое предложение?

UPDATE

Я считаю, что это правильное решение. Внутри ProcessResponse метода в AcsCommand мы имеем samlResponse InnerXml, оттуда мы можем разобрать хотел данные, создавать дополнительные требования, или любой другой, так что теперь у меня есть решение (обходной путь может быть для моего проблема). Есть ли еще более элегантное решение?

ответ

2

Kentor.AuthServices SP преобразует все атрибуты в утверждения к утверждениям. Если вы установите контрольную точку в свой метод GetNameID и проверите нумерацию claimsIdentity.Claims, все атрибуты должны быть там. Если это не так, пожалуйста, сообщите о проблеме на AuthService github page.

+0

Да, они есть. Большое спасибо! Это более элегантное решение, чем мое. Я написал собственный парсер, чтобы вытащить их из XML ответа. Также я не видел, чтобы вы в IdP-решении использовали одну и ту же логику, чтобы перевести все дополнительные претензии в атрибуты. Есть ли недостаток в преобразовании всех претензий в качестве атрибутов и наоборот? Я имею в виду, что мой случай будет работать нормально, но вообще говоря? – ShP

+0

Нет, атрибуты и претензии - это всего лишь два имени для одной и той же вещи. В редких случаях, когда требования должны быть отфильтрованы, это может быть сделано с помощью 'ClaimsAuthenticationManager'. –

+0

Могу ли я также получить доступ к saml2: Subject saml2: значение NameID, не создавая собственный парсер? – ShP