Я мав неабияку пригоду, щоб JWT працював над DotNet core 2.0 (зараз він виходить у фінальному випуску сьогодні). Існує тонна документації, але все приклади код , як представляється, використовуючи застарілий API , і приходячи в свіжому Ядро, Це позитивно запаморочливим , щоб з'ясувати , як саме це повинно бути реалізовано. Я намагався використовувати Хосе, але додаток. UseJwtBearerAuthentication застаріло, і немає документації щодо подальших дій.
Хтось має проект з відкритим кодом, який використовує dotnet core 2.0, який може просто проаналізувати JWT із заголовка авторизації та дозволити мені авторизувати запити на кодований токен JWT, кодований HS256?
Клас нижче не створює жодних винятків, але жодні запити не авторизовані, і я не отримую вказівки, чому вони несанкціоновані. Відповіді порожні 401-х, тому для мене це вказує, що не було винятку, але що секрет не відповідає.
Дивне, що мої токени зашифровані за допомогою алгоритму HS256, але я не бачу жодного індикатора, який би сказав йому, щоб змусити його використовувати де-небудь цей алгоритм.
Ось клас, який я маю на даний момент:
using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Net.Http.Headers;
using Newtonsoft.Json.Linq;
using Microsoft.IdentityModel.Tokens;
using System.Text;
namespace Site.Authorization
{
public static class SiteAuthorizationExtensions
{
public static IServiceCollection AddSiteAuthorization(this IServiceCollection services)
{
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("SECRET_KEY"));
var tokenValidationParameters = new TokenValidationParameters
{
// The signing key must match!
ValidateIssuerSigningKey = true,
ValidateAudience = false,
ValidateIssuer = false,
IssuerSigningKeys = new List<SecurityKey>{ signingKey },
// Validate the token expiry
ValidateLifetime = true,
};
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(o =>
{
o.IncludeErrorDetails = true;
o.TokenValidationParameters = tokenValidationParameters;
o.Events = new JwtBearerEvents()
{
OnAuthenticationFailed = c =>
{
c.NoResult();
c.Response.StatusCode = 401;
c.Response.ContentType = "text/plain";
return c.Response.WriteAsync(c.Exception.ToString());
}
};
});
return services;
}
}
}