Хабрахабр

Аутентификация asp .net core через IdentityServer4

Тут не будет ничего необычного, один фреймворк «IdentityServer4» будет выполнять аутентификацию по логину и паролю на неком Api, плюс еще обрабатывать refresh_token.

Работать он будет с существующим IdentityDbContext, IdentityUser.

Это один из четырех типов разрешений OAuth 2. По итогу получится сценарий при котором, для каждой аутентификации будет выдан и сохранен в таблицу «PersistedGrants» один refresh_token. 0:

Учётные данные владельца ресурса (Resource Owner Password Credentials): используются доверенными приложениями, например приложениями, которые являются частью самого сервиса.

Все работы по обслуживанию токенов берет на себя фреймворк.

Итак начнем.
Для указания метода разрешения задаются «клиенты», у меня будет один:

Config DataLayer.

new Client ,//для получения инфы о пользователе по /connect/userinfo AllowOfflineAccess = true //включает рефреш-токен }

Далее этого клиента сидируем в базу при ее создании:

Program TestIdentityServer.

services.GetRequiredService<DbInitializer>().Initialize();

В методе «Initialize» добавлен код для создания необходимых баз и инсерта данных, в том числе клиента. Но до этого необходимо выполнить миграции, потому что создать придется базу из 3х контекстов, где первый контекст IdentityDbContext ApplicationUser, а остальные для IdentityServer4:

DbInitializer DataLayer.

_context.Database.Migrate(); _configurationDbContext.Database.Migrate(); _persistedGrantDbContext.Database.Migrate();

if (!_configurationDbContext.Clients.Any()) { foreach (var client in _config.GetClients().ToList()) { _configurationDbContext.Clients.Add(client.ToEntity()); } _configurationDbContext.SaveChanges(); }

Миграции:

dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb dotnet ef migrations add InitialAuthMigration -c AuthContext -o Data/Migrations/IdentityServer/Auth

Ссылка на код будет в конце.

После задания клиента и создания базы сервер может уже обрабатывать запросы "/connect/token" по логину с паролем и выдавать access_token с refresh_token.
По нему же, с указанием refresh_token, обновить их. Идем дальше.

Логин пароль:

image

refresh_token

image

/connect/userinfo

image

Его связь с ним будет осуществляться так: Теперь добавим апи которое будет авторизироваться у IdentityServer4.

Startup DataApi.

services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = settings.Authority; //Адресс сервера http://localhost:5000 options.RequireHttpsMetadata = false; options.ApiName = settings.ApiName;//api1 });

Само апи будет развернуто на другом порту.

Авторизация теперь будет проверяться как обычно атрибутом "[Authorize]".

/api/Default

image

На этом все, пишите кто че думает или чего не хватает.

Ссылка на код.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть