Я разрабатываю приложение MVC 4 для размещения в Azure и хочу использовать свою службу ACS для аутентификации. Как только пользователь будет аутентифицирован, я буду использовать результирующие данные претензии, чтобы соотнести мои локальные записи. Вследствие этого я хотел бы распространить иск, чтобы включить дополнительные претензии, которые представляют собой локальные полномочия, которые мое приложение будет использовать для принятия решений о авторизации. Я предполагаю, что мне нужно заменить Принцип, но я не уверен, где и когда делать это в MVC, и вы хотите избежать нарушения какой-либо проверки подлинности, которая обычно используется в течение всего сеанса. Может кто-нибудь пролить некоторый свет на это?Расширение требований ASUS к ACC для сеансов MVC
ответ
В дополнение к тому, что @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
Точка растяжимость в WIF для обогащения claimset является ClaimsAuthenticationManager
Из документов:
Менеджер аутентификации претензий предоставляет точку расширяемости в конвейера обработки RP, которые можно использовать для фильтрации , модифицировать или вносить новые требования в набор требований, представленных IClaimsPrincipal до вызова приложения RP.
Вы также можете добавить правила в ACS, чтобы обогатить токен необходимой вам формулой.