Так что я некоторое время колотил головой из-за этой проблемы.
У нас есть одно веб-приложение, которое использует IdentityServer4 и AspNetIdentity для аутентификации и регистрации пользователей ( это работает, как предполагалось ).Кроме того, у нас есть другой API (внутри того же решения) , который может использовать IdentityServer4 для аутентификации пользователей, обращающихся к API .
Однако проблема в том, что кроме аутентификации мы не можем использовать API для создания новых пользователей .
Например, пользователи должны иметь возможность создавать других пользователей через веб-API, а не только из веб-приложения, поскольку в нашем случае пользователи связаны с другими пользователями (представьте, что это несколько профилей).
Я не очень знаком со всеми службами конфигурации, которые предлагают .Net Core Framework, и я пробовал несколько способов доступа к диспетчеру пользователей веб-приложения через API, чтобы зарегистрировать своих пользователей с помощью классических запросов POST, нокажется, ничего не работает.Поиск в Интернете сложен, потому что наша проблема довольно специфична, поэтому я публикую здесь.
API Startup.cs - ConfigureServices:
services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(options =>
{
// base-address of your identityserver
options.Authority = Configuration["IdentityServer:Url"];
// name of the API resource
options.ApiName = Configuration["IdentityServer:APIName"];
options.ApiSecret = Configuration["IdentityServer:APISecret"];
options.EnableCaching = true;
options.CacheDuration = TimeSpan.FromMinutes(10); // that's the default
options.RequireHttpsMetadata = Convert.ToBoolean(Configuration["IdentityServer:RequireHttpsMetadata"]);
});
API Startup.cs - Настройка:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("AllowAllOrigins");
app.UseAuthentication();
app.UseMvc();
}
API UsersController.cs - Конструктор:
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _context;
public UsersController(IUserService service,
ApplicationDbContext context,
UserManager<ApplicationUser> userManager)
{
_service = service;
_userManager = userManager;
_context = context;
}
Теперь проблема в том, что при запускеAPI и попытаться получить доступ к UsersController Я получаю следующую ошибку:
System.InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.Identity.UserManager`1[XXXXX.Data.Models.ApplicationUser]' while attempting to activate 'XXXXXXX.Api.Controllers.UsersController'.
Я искренне надеюсь, что смогу найти хоть какой-нибудь совет о том, как с ним работать.
Пожалуйста, если что-тонеясный ответ, и я буду более чем рад добавить дополнительную информацию или прояснить ситуацию.
С уважением,
Мариос.
РЕДАКТИРОВАТЬ: Спасибо всем за ответ.Фрагмент кода, предоставленный @Vidmantas ниже, сделал свое дело.
Из-за моего ограниченного знания ядра .net я много проб и ошибок выполнял функцию настройки служб, которая, как вы можете себе представить, не работала.Я твердо верю, что использование ядра .net довольно просто (например, API), но когда дело доходит до конфигурирования сервисов, сложность (в основном озадачивающая / сбивающая с толку) взрывается.
Что касается архитектуры, вы дали мне хорошие идеи для будущего рефакторинга.Записки сделаны.
Мариос.