2014-01-25 2 views
7

У меня есть вопрос относительно претензий в MVC 5.MVC 5 и использование аутентификации претензий по умолчанию

Так в основном кажется, что я есть зарегистрированный пользователь в БД, теперь пользователь собирается войти, например, так:

private async Task SignInAsync(ApplicationUser user, bool isPersistent) 
{ 
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
    // Add more custom claims here if you want. Eg HomeTown can be a claim for the User 
    var homeclaim = new Claim(ClaimTypes.Country, user.HomeTown); 
    identity.AddClaim(homeclaim); 
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
} 

Так что в этом случае я добавляю новое требование к личности, а затем я вхожу в это удостоверение.

Теперь мои вопросы:

  • Что является использование установки этого требования? (потому что я также могу получить это из db, если мне это нужно, в чем смысл этого иска)

  • И как его использовать позже в коде?

ответ

9

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

Указанный выше метод можно назвать преобразованием претензий, которое часто связано с чтением данных, которые преобразуются в утверждения после успешной проверки подлинности.

Для того, чтобы прочитать его позже вы можете сделать это:

//Get the current claims principal 
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal; 

//Get the country from the claims 
var country = identity.Claims.Where(c => c.Type == ClaimTypes.Country).Select(c => c.Value); 

Update

Просто, чтобы обеспечить некоторую дополнительную информацию для ответа, как описано в комментариях ниже.

При использовании подхода, основанного на требованиях, вы также можете воспользоваться менеджером авторизации претензий, который может обеспечить централизованный/мелкозернистый контроль доступа к ресурсам и действиям.

Если вы не использовали претензии, прежде чем лучше подумать о действиях против ресурсов, а не о разрешении на основе ролей. Таким образом, вы можете сверлить право и управлять доступом к каждому ресурсу/действию индивидуально, а не иметь множество ролей для каждого из них.

Мне лично нравится использовать смесь, но также сохраняйте роли в качестве претензий. Таким образом, я могу использовать стандартные теги авторизации в mvc с ролями, которые читают утверждения и используют атрибуты thinktecture/ClaimsAuthorization, чтобы заставить диспетчер авторизации претензий вводить более сложные правила.

Хорошая ссылка на реализацию претензий проверки подлинности на основе в MVC 4 доступен здесь:

http://dotnetcodr.com/2013/02/25/claims-based-authentication-in-mvc4-with-net4-5-c-part-1-claims-transformation/

+0

О, так что если у меня есть много свойств, которые я хотел бы часто называют во время веб-приложения, то я должны ли они предъявлять претензии, когда пользователь входит в систему, а затем вызывает их? избегая попадания в базу данных каждый раз ...? – Alnedru

+0

Да, вы также получаете возможность использовать диспетчер авторизации претензий, чтобы централизовать все более мелкие разрешения доступа к зерну. Если вы не использовали претензии до того, как лучше подумать о действиях против ресурсов, а не о разрешениях на основе ролей. Таким образом, вы можете развернуть все действия и разрешить доступ к каждому из них. Я лично люблю использовать смесь, но сохраняю роли в качестве претензий.Таким образом, я могу использовать стандартные теги авторизации в mvc с ролями, которые читают утверждения и используют атрибуты thinktecture, чтобы заставить диспетчер авторизации претензий усложнять правила. – hutchonoid

+0

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

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