У меня возникла следующая проблема: я пытаюсь защитить свой ASP.NET Core Web API с помощью аутентификации на основе ролей.
Я добавил следующие строки в ConfigureServices()
:
// Authorization
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
options.LoginPath = "/api/Account/Login";
options.AccessDeniedPath = "/api/Account/AccessDenied";
options.SlidingExpiration = true;
});
И до Configure()
:
// Authorization
app.UseAuthentication();
using (var scope = app.ApplicationServices.CreateScope())
{
CreateRoles(scope.ServiceProvider.GetService<RoleManager<IdentityRole>>()).Wait();
CreateUsers(scope.ServiceProvider.GetService<UserManager<ApplicationUser>>()).Wait();
}
CreateRoles()
и CreateUsers()
работают нормально: эти методы создают некоторые роли и пользователя-администратора, сохраняют их в соответствующих таблицах SQL и вменеджер пользователей / ролей.
Теперь я могу защитить свои контроллеры с помощью [Authorize]
.Доступ к вызовам API, помеченным [AllowAnonymous]
, возможен.
Но как мне войти в API и получить доступ к другим вызовам API?
Для этого я создал учетную записьКонтроллер выглядит следующим образом:
[Route("/api/Account")]
public class AccountController : Controller
{
public AccountController()
{
}
[HttpPost]
[Route("Login")]
public async Task<IActionResult> Login()
{
}
}
Я прочитал много статей на эту тему, но не могу запустить и запустить логин.Таким образом, цель состоит в том, чтобы войти в систему с пользователем, хранящимся в диспетчере пользователей, и получить доступ к некоторым вызовам API, которые требуют аутентификации.Может кто-нибудь попытаться объяснить, как мне этого добиться?