Я пытаюсь изучить как ASP.NET Core Web API, так и ASP.NET Core Identity. Я видел, что ASP.NET Core Identity теперь интегрирован в веб-API как часть .NET 8 через MapIdentityAPI.
Я пытаюсь разработать приложение, которое будет использовать мой API, однако я хочу ограничить процесс регистрации только авторизованными пользователями, имеющими определенную роль. Это сделано для того, чтобы только администраторы приложения могли зарегистрировать нового пользователя.
Однако я не уверен, как это сделать, поскольку методы Identity автоматически генерируются путем реализации ASP.NET Core Identity, поэтому я не могу пойти и добавить к ним атрибут Authorize, чтобы ограничить доступ. Есть ли какой-нибудь совет, как мне это сделать?
Большое спасибо
Я уже пытался реализовать ASP.NET Core Identity с помощью ASP.NET Core Web API в .NET 8, который прошел успешно благодаря тестированию с помощью Swagger, однако я не могу найти методы, чтобы поместить в них атрибут авторизации. Я использую API, поскольку он будет соединителем для внешнего приложения .NET MAUI.





Если вы просто хотите добавить роль для маршрута регистрации, я предлагаю вам попытаться создать собственный метод mapidentityapi.
Его коды soucres это:
Поэтому вам просто нужно скопировать их, создать и изменить регистр метода MapIdentityApi, как показано ниже:
// NOTE: We cannot inject UserManager<TUser> directly because the TUser generic parameter is currently unsupported by RDG.
// https://github.com/dotnet/aspnetcore/issues/47338
routeGroup.MapPost("/register", async Task<Results<Ok, ValidationProblem>>
([FromBody] RegisterRequest registration, HttpContext context, [FromServices] IServiceProvider sp) =>
{
var userManager = sp.GetRequiredService<UserManager<TUser>>();
if (!userManager.SupportsUserEmail)
{
throw new NotSupportedException($"xxxx requires a user store with email support.");
}
var userStore = sp.GetRequiredService<IUserStore<TUser>>();
var emailStore = (IUserEmailStore<TUser>)userStore;
var email = registration.Email;
if (string.IsNullOrEmpty(email) || !_emailAddressAttribute.IsValid(email))
{
return CreateValidationProblem(IdentityResult.Failed(userManager.ErrorDescriber.InvalidEmail(email)));
}
var user = new TUser();
await userStore.SetUserNameAsync(user, email, CancellationToken.None);
await emailStore.SetEmailAsync(user, email, CancellationToken.None);
var result = await userManager.CreateAsync(user, registration.Password);
if (!result.Succeeded)
{
return CreateValidationProblem(result);
}
await SendConfirmationEmailAsync(user, userManager, context, email);
return TypedResults.Ok();
}).RequireAuthorization("Admin");
Вы имеете в виду, что хотите настроить маршрут так, чтобы только пользователь с ролью администратора мог получить доступ к реестру?