Хабрахабр

Аутентификация 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

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

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

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

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

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

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

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