2012-09-18 6 views
0

Я разрабатываю приложение MVC 4 для размещения в Azure и хочу использовать свою службу ACS для аутентификации. Как только пользователь будет аутентифицирован, я буду использовать результирующие данные претензии, чтобы соотнести мои локальные записи. Вследствие этого я хотел бы распространить иск, чтобы включить дополнительные претензии, которые представляют собой локальные полномочия, которые мое приложение будет использовать для принятия решений о авторизации. Я предполагаю, что мне нужно заменить Принцип, но я не уверен, где и когда делать это в MVC, и вы хотите избежать нарушения какой-либо проверки подлинности, которая обычно используется в течение всего сеанса. Может кто-нибудь пролить некоторый свет на это?Расширение требований ASUS к ACC для сеансов MVC

ответ

1

В дополнение к тому, что @Eugenio Пэйс сказал, что стоит отметить, что вы можете просто добавлять и удалять претензии и из IClaimsPrincipal:

public static void UpdateClaims(IClaimsIdentity identity) 
{ 
    identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Name)); 
    identity.Claims.Remove(identity.Claims.SingleOrDefault(x => x.ClaimType == ClaimTypes.Email)); 
    identity.Claims.Add(new Claim(ClaimTypes.Name, "Steve Smith")); 
    identity.Claims.Add(new Claim(ClaimTypes.Email, "[email protected]")); 
} 

UpdateClaims(User.Identity as IClaimsIdentity); 

Иски добавил может быть либо один из типов, перечисленных в ClaimTypes , или пользовательская строка вашего собственного проекта. Вы можете добавить несколько претензий типа ClaimTypes.Role. Я не уверен в других типах.

Из ClaimsCollection документов:

Представляет коллекцию претензий, связанные с одной темой.

Добавление претензии в PropertyCollection неявно связывает это требование с субъектом, связанным с коллекцией, вызывая метод SetSubject .

Удаление претензии из PropertyCollection неявно удаляет эту ассоциацию , также вызывая метод SetSubject.

http://msdn.microsoft.com/en-us/library/microsoft.identitymodel.claims.claimcollection.aspx

Обновление

для .Net 4.5, класс идентичности и способ для обновления требований изменились, а также пространство имен:

using System.IdentityModel; 
using System.Security.Claims; 

public static void UpdateClaims(Member member, ClaimsIdentity identity) 
{ 
    identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Name)); 
    identity.RemoveClaim(identity.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Email)); 
    identity.AddClaim(new Claim(ClaimTypes.Name, "Steve Smith")); 
    identity.AddClaim(new Claim(ClaimTypes.Email, "[email protected]")); 
} 

UpdateClaims(User.Identity as ClaimsIdentity); 

http://msdn.microsoft.com/en-us/library/system.security.claims.claimsidentity.aspx

2

Точка растяжимость в WIF для обогащения claimset является ClaimsAuthenticationManager

Из документов:

Менеджер аутентификации претензий предоставляет точку расширяемости в конвейера обработки RP, которые можно использовать для фильтрации , модифицировать или вносить новые требования в набор требований, представленных IClaimsPrincipal до вызова приложения RP.

Вы также можете добавить правила в ACS, чтобы обогатить токен необходимой вам формулой.