Авторизация ядра .NET - константа 403 на носителе JWT - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь авторизовать запросы к моему 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], работают просто отлично.

Есть ли способ, по крайней мере, отладить и посмотреть, что происходит?

1 Ответ

0 голосов
/ 26 апреля 2018

Попробуйте включить CORS в файле Startup.cs

public void ConfigureAuth(IAppBuilder app) {
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
    // Rest of code
}
...