Вам интересно зачем делал через Policy. Затем, чтоЭто работает:
[Authorize(Policy = "CookiePolicy")]
[HttpGet("test-cookie")]
public async Task<IActionResult> GetTestCookie()
{
return await Task.FromResult(Ok(new { result = "Cookie authorized" }));
}
[Authorize(Policy = "BearerPolicy")]
[HttpGet("test-bearer")]
public async Task<IActionResult> GetTestBearer()
{
return await Task.FromResult(Ok(new { result = "Bearer authorized" }));
}
[Authorize(AuthenticationSchemes = "Bearer")]
[HttpGet("test-bearer2")]
public async Task<IActionResult> GetTestBearer2()
{
return await Task.FromResult(Ok(new { result = "Bearer authorized" }));
}
Это не работает (через bearer можно авторизоваться):
[Authorize(AuthenticationSchemes = "Identity.Application")]
[HttpGet("test-cookie2")]
public async Task<IActionResult> GetTestCookie2()
{
return await Task.FromResult(Ok(new { result = "Cookie authorized" }));
}
Вам был интересна проверка типов авторизации:
public class AuthenticationTypeAuthorizationHandler : IAuthorizationHandler
{
public Task HandleAsync(AuthorizationHandlerContext context)
{
var pendingRequirements = context.PendingRequirements.ToList();
foreach (var requirement in pendingRequirements.OfType<AuthenticationTypeRequirement>())
{
if (requirement.AuthenticationType == context.User.Identity.AuthenticationType)
context.Succeed(requirement);
}
return Task.CompletedTask;
}
}
Если знаете как сделать так, чтобы [Authorize(AuthenticationSchemes = "ЧТО-ТО")] четко разделял bearer от куки, то пожалуйста, высказывайтесь.