определяют две политики: одну для API ( apipolicy ) и другую для обычных вызовов MVC ( defaultpolicy ) в Startup.cs в ConfigureServices метод this :
services.AddAuthorization(options =>
{
// define several authorization policies if needed
options.AddPolicy("defaultpolicy", b =>
{
b.RequireAuthenticatedUser();
});
options.AddPolicy("apipolicy", b =>
{
b.RequireAuthenticatedUser();
// define which authentication is used for this policy
b.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
});
});
для применения каждой политики, необходимой для украшения контроллеров желаемым [Authorize ("policy")]
Атрибутом, например:
SampleDataApiController.cs - с применением apipolicy
[Authorize ("apipolicy")]
[Route("api/[controller]")]
public class SampleDataApiController : Controller
{
}
AccountController.cs - с применением политики по умолчанию
[Authorize("defaultpolicy")]
[Route("[controller]/[action]")]
public class AccountController : Controller
{
}
В качестве примера вот мой полный ConfigureServices метод, чтобы дать вам идею:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddAuthorization(options =>
{
options.AddPolicy("defaultpolicy", b =>
{
b.RequireAuthenticatedUser();
});
options.AddPolicy("apipolicy", b =>
{
b.RequireAuthenticatedUser();
b.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
});
});
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "CustomScheme";
})
.AddCookie()
.AddJwtBearer(options =>
{
// Bearer Logic
})
.AddOAuth("CustomScheme", options =>
{
// Oauth Logic
});
}
Я просто добавил следующий нюгет для простоты. Microsoft.AspNetCore.All