2016-03-23 5 views
4

Я изучаю, используя авторизацию на основе утверждений в ASP.NET (MVC Core 1.0). При настройке ClaimsIdentity я предоставляю список пар строк/строк значений для представления каждого Claim. Пример:Требования ASP.NET для ClaimTypes

List<Claim> claims = new List<Claim> 
{ 
    new Claim("UserID", user.ID), 
    new Claim("Name", user.Name), 
    new Claim("Role", "basic") 
}; 

Я понимаю, что могу использовать любые ключи/значения, которые я хочу. Но я заметил, что есть некоторые предварительно определенные ключи, доступные через ClaimsType class. Таким образом, я мог бы потенциально использовать некоторые из этих предопределенных ключей вместо:

List<Claim> claims = new List<Claim> 
{ 
    new Claim(ClaimTypes.Sid, user.ID), 
    new Claim(ClaimTypes.Name, user.Name), 
    new Claim(ClaimTypes.Role, "basic") 
}; 

Вопросы:

  1. Если я использую предопределенные ключи, существуют какие-то правила/ограничения в отношении фактических значений назначается каждому ключу или определяется ли его приложение? Например, нормально ли вставить первичный ключ базы данных в ClaimTypes.Sid, или у ASP.NET есть определенные ожидания относительно того, что должно содержать ClaimTypes.Sid?

  2. Есть ли ClaimTypes, которые требуется, или это полностью до приложения, чтобы решить, что включать или не включать? Я полагаю, что ответ может зависеть от определенных сторонних служб аутентификации, с которыми я бы взаимодействовал, но как насчет простого случая автономного проекта ASP.NET, который не использует стороннюю аутентификацию. Есть ли у ASP.NET какие-либо требования?

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

ответ

5

Если я использую предопределенные ключи, существуют ли правила/ограничения относительно фактических значений, присвоенных каждому ключу, или это приложение определено? Например, нормально ли использовать первичный ключ базы данных в ClaimTypes.Sid, или у ASP.NET есть определенные ожидания относительно того, что должно быть ClaimTypes.Sid?

Используя одну из заранее определенных ClaimTypes будет также изменить свойство Type, если ваш полученный Claim. You can find a list of these types here. Насколько я знаю, вы можете поместить идентификатор базы данных в ClaimTypes.Sid, однако я бы настоятельно рекомендовал использовать ваше собственное имя, которое называет его тем, чем оно является.

Есть ли ClaimTypes, которые необходимы, или это полностью до приложение, чтобы решить, что включать или не включать? Я думаю, ответ может зависеть от определенных сторонних служб аутентификации Я бы общался, но как насчет простого случая автономного ASP.NET-проекта , который не использует аутентификацию сторонней организации . Есть ли у ASP.NET какие-либо требования?

Предполагая, что нет стороннего производителя, вы можете решить, что и как не требуется. Имейте в виду, что если вы сохраняете претензии в cookie (а не стороннем источнике), ваше пространство несколько ограничено; cookies cannot be larger than 4096 bytes in total.

Лучшие статьи, которые я нашел до сих пор для аутентификации в ASP.NET Core, являются here и here.Начиная с этой публикации, мы все еще находимся в RC1, поэтому некоторые детали могут измениться до окончательной версии.

1
  1. Если я использую предопределенные ключи, существуют ли правила/ограничения в отношении фактических значений, присвоенных каждому ключу, или это приложение определено? Например, нормально ли вставлять первичный ключ базы данных в ClaimTypes.Sid, или у ASP.NET есть определенные ожидания того, что должен содержать идентификатор ClaimTypes.Sid?

В основном нет правил resstrictions, но это зависит от потребителя лексем. Идентификатор Asp.Net по умолчанию ожидает, что имя пользователя будет равно ClaimTypes.Name (либо пользователи отображают имя, либо почту, независимо от того, что вы используете), роль ClaimTypes.Role и идентификатор пользователя (не обязательно идентификатор строки, только уникальный для идентификации пользователя, то есть Guid или email адрес) ClaimTypes.NameIdentifier. По умолчанию также можно увидеть here on GitHub.

Если вы используете пользовательские типы претензий, вам нужно сообщить об этом в ClaimsIdentityOptions при настройке Identity Asp.Net.

Тип претензии, установленный в UserNameClaimType, используется, когда вы делаете User.Identity.Name для доступа к нему в своем контроллере. Если ваш тип претензии не соответствует таковому в ClaimsIdentityOptions, он просто просто возвращает null.

+0

Благодарим за информацию об Identity. В настоящее время я не использую Identity, но это может измениться по дороге. Я использую EF6 с MVC Core 1 прямо сейчас (потому что EF7 слишком неполный), а Identity, похоже, переплетается с EF7 и требует [прыгать через некоторые обручи] (http://stackoverflow.com/a/33962018/333127) для работы с EF6, поэтому я сейчас удержался. – cbranch

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