Обработка нескольких удостоверений ASP.net Core 2.1 в одном проекте MVC - PullRequest
0 голосов
/ 12 февраля 2019

У нас есть Account-API, который отвечает за создание токенов JWT, которые затем используются в различных API для аутентификации пользователя.Мы выбрали подход Account-API, потому что таким образом мы можем централизовать управление учетными записями, создание токенов и т. Д. В одном API, в то время как другие просто доверяют токенам, таким образом, все хорошо организовано и не имеет состояния.

Проблематеперь мы реализовали AdminUsers и Customer в разных DBContexts, чтобы отделить эти логины «физически» друг от друга в базе данных.

Наши вызовы AddIdentity в Startup.cs:

services.AddIdentity<CustomerUser, CustomerRole>()
   .AddEntityFrameworkStores<CustomerContext>();

services.AddIdentity<AdminUser, AdminRole>
   .AddEntityFrameworkStores<AdminContext>();

Теперь, когда мы добавляем промежуточное программное обеспечение для аутентификации UseAuthentication(), я получаю исключение при запуске, говоря:

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Private.CoreLib.dll: 'Scheme already exists: Identity.Application'
   at Microsoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme(String name, Action`1 configureBuilder)
   at Microsoft.AspNetCore.Authentication.AuthenticationBuilder.<>c__DisplayClass4_0`2.<AddSchemeHelper>b__0(AuthenticationOptions o)
   at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
   at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
[...]

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

Проблема здесь: мы используем IdentityServer4 для создания токена и подготовки к материалам OAuth2.0.И IdentityServer4 звонит UseAuthentication от нашего имени.И нам на самом деле нужна Аутентификация в AccountAPI, поскольку мы предоставляем конечную точку /me, чтобы пользователи могли получить свой профиль (но, возможно, здесь лучше использовать ID-токен?)

Можем ли мы что-нибудь сделатьпо этому сценарию?Возможно ли иметь действительно разделенные учетные записи и идентификаторы в одном приложении, или мы должны разделить это на два приложения?Или создать наше собственное промежуточное программное обеспечение для проверки подлинности (которое определяет, какой идентификатор пользователя точно включен в JWT)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...