Я пытаюсь авторизовать запросы к моему API, к которым прикреплен токен JWT, однако ни одно из руководств, сообщений в блоге и документации не помогло избежать постоянной ошибки 403 - Unauthorized
.
Это текущая конфигурация -skimmed:
Класс, который генерирует токен: TokenManagement.cs
:
// Add the claims to the token
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, credentials.Username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim("claimName", "claimValue")
};
Настройка услуг: Startup.cs
- ConfigureServices()
:
services.Configure<GzipCompressionProviderOptions>(options => options.Level = System.IO.Compression.CompressionLevel.Optimal);
services.AddResponseCompression();
services.AddAuthentication()
.AddJwtBearer(config => {
config.RequireHttpsMetadata = false;
config.SaveToken = true;
config.TokenValidationParameters = new TokenValidationParameters()
{
ValidIssuer = "Issuer",
ValidAudience = "Audience",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(symmetricKey))
};
});
services.AddAuthorization(options => {
options.AddPolicy("myCustomPolicy", policy => {
policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme);
policy.RequireClaim("claimName", "claimValue");
});
});
services.AddMvc();
Общая конфигурация: Startup.cs
- Configure()
:
app.UseAuthentication();
app.Use(async (context, next) => {
await next();
if (context.Response.StatusCode == 404 &&
!Path.HasExtension(context.Request.Path.Value)) {
context.Request.Path = "/index.html";
await next();
}
});
app.UseMvc();
app.UseResponseCompression();
app.UseDefaultFiles();
app.UseStaticFiles();
Контроллер, который должен быть авторизован: ActionsController.cs
:
[Authorize(Policy = "myCustomPolicy")]
[Route("api/[controller]")]
public class ActionsController : Controller
Любой запрос, который я отправляю на сервер (который содержит токен JWT с соответствующей заявкой), возвращается как 403
.
Любые методы, имеющие атрибут [AllowAnonymous]
, работают просто отлично.
Есть ли способ, по крайней мере, отладить и посмотреть, что происходит?