Подтвердить что ты не робот

Идентификация и претензии ASP.NET

Я пытаюсь отойти от WebForms и изучить MVC, в частности, используя новую модель ASP.NET Identity. Однако я не могу найти официальную документацию от Microsoft, которая демонстрирует, как создать объект претензий, и хранить его в базе данных для аутентифицированного пользователя.

Мой сайт должен сделать следующее:

  • Аутентификация пользователя - TICK
  • Создайте претензию и сохраните в ней информацию о пользователе, чтобы я мог использовать ее на протяжении всего сеанса - NO TICK
  • Отбросить роли пользователей из новой таблицы ролей ASP.NET - NOT TICK

Может ли кто-нибудь пролить свет на то, как это можно достичь?

4b9b3361

Ответ 1

Честно говоря, я все еще изучаю веревки с помощью Identity. По общему признанию, предоставленная Microsoft документация может быть лучше, но я никогда не нашел ни одной из их документации все, что было бы полезно. Самый лучший материал всегда приходит из сообщества, и, к сожалению, Identity по-прежнему так новичок, что сообщество уже успело его воплотить в жизнь.

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

Претензии

В вашем UserManager есть три метода значимости: GetClaimsAsync, AddClaimAsync и RemoveClaimAsync.

Чтобы получить все претензии для пользователя:

var claims = await UserManager.GetClaimsAsync(userId);

Вы можете получить текущий идентификатор пользователя:

var userId = User.Identity.GetUserId();

Как только у вас появятся претензии, вытащите конкретную информацию:

var someClaim = claims.FirstOrDefault(c => c.Type == "SomeClaimType");

Где "SomeClaimType" - это имя требования, поскольку оно было добавлено. В некоторых сценариях это может быть полностью квалифицированный URN, или это может быть просто строка. Если это не то, что вы лично добавили, лучше всего просто проверить переменную claims во время сеанса отладки, чтобы увидеть, что у вас на самом деле есть.

Кроме того, поскольку список претензий является запросом, вы можете в значительной степени выполнить любой запрос LINQ, который вы хотите на нем, Where, Count и т.д.

Чтобы добавить новое требование:

await UserManager.AddClaimAsync(userId, new Claim("SomeClaimType", claimValue));

И удалить заявку:

await UserManager.RemoveClaimAsync(userId, someClaim);

Роли

Роли работают аналогичным образом. Чтобы получить все роли для пользователя:

var roles = await UserManager.GetRolesAsync(userId);

Чтобы узнать, находится ли пользователь в определенной роли:

var hasRole = await UserManager.IsInRoleAsync(userId, "SomeRole");

Чтобы добавить пользователя в определенную роль:

await UserManager.AddToRoleAsync(userId, "SomeRole");

И удалить:

await UserManager.RemoveFromRoleAsync(userId, "SomeRole");

Добавление ролей в первую очередь немного отличается; вам нужно создать экземпляр RoleStore.

var roleStore = new RoleStore<IdentityRole>(context);

Затем вы можете использовать это для управления всеми ролями. Например, чтобы создать новую роль:

await roleStore.CreateAsync(new IdentityRole("RoleName"));

Чтобы удалить:

var identityRole = await roleStore.FindByNameAsync("RoleName");
await roleStore.DeleteAsync(identityRole);

Получение всех ролей невозможно в API-интерфейсе Identity, но вы всегда можете вернуться к запросам непосредственно с Entity Framework:

var allRoles = context.Roles.OrderBy(o => o.Name);

Ответ 2

Что касается Identity Asp.Net, я бы настоятельно рекомендовал реализацию Brock Allen, называемую "Identity Reboot". Идентификация Перезагрузка в основном представляет собой набор расширений к идентификатору ASP.NET. Это было вдохновлено из-за разочарования в реализации ASP.NET Identity.

Здесь вы можете прочитать вступительную статью здесь. Вы можете скачать исходный код и образцы из github здесь.

Вы можете установить его с помощью nuget:

www.nuget.org/packages/BrockAllen.IdentityReboot/
www.nuget.org/packages/BrockAllen.IdentityReboot.Ef/   (for entity framework)