Я использую openiddict, который выполнен с возможностью использовать JSON веб-маркеры:.net ядро - ключ подписи подлинности промежуточного JWT игнорируется
// Add authentication
services.AddAuthentication();
// Add OpenId Connect/OAuth2
services.AddOpenIddict()
.AddEntityFrameworkCoreStores<ApplicationDbContext>()
.AddMvcBinders()
.EnableTokenEndpoint("/connect/token")
.AllowPasswordFlow()
.AllowRefreshTokenFlow()
.UseJsonWebTokens() // access_token should be jwt
// You can disable the HTTPS requirement during development or if behind a reverse proxy
.DisableHttpsRequirement()
// Register a new ephemeral key, that is discarded when the application
// shuts down. Tokens signed using this key are automatically invalidated.
// To be used during development
.AddEphemeralSigningKey();
Я настроен JWT промежуточного слоя в следующем порядке:
// Add Jwt middleware for authentication
var secretKey = Configuration.Get<AppOptions>().Jwt.SecretKey;
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
RequireHttpsMetadata = env.IsProduction(),
Audience = Configuration.Get<AppOptions>().Jwt.Audience,
Authority = Configuration.Get<AppOptions>().Jwt.Authority,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)),
ValidateIssuer = true,
// makes no difference seemingly being ignored
//ValidIssuer = Configuration.Get<AppOptions>().Jwt.Authority,
ValidateAudience = true,
ValidAudience = Configuration.Get<AppOptions>().Jwt.Audience,
ValidateLifetime = true,
}
});
// Add OpedId Connect middleware
app.UseOpenIddict();
Как вы можете видеть, ключ подписи эмитента устанавливается на симметричном ключе:
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey)),
но JWT согл ess_tokens создано уже alg
требование установлено в RS256
, так что кажется, что этот параметр игнорируется и openiddict использует закрытый ключ RSA подписать маркер генерируется из
.AddEphemeralSigningKey();
на самом деле нет, вам нужно реги запустите ключ подписи как в параметрах OpenIddict, так и в вариантах промежуточного программного обеспечения канала JWT. – Pinpoint
@Pinpoint Он работает отлично для меня, просто установив его в OpenIdDictservice –
Я действительно сомневаюсь в этом. Если вы не зарегистрируете свой симметричный ключ подписи в параметрах промежуточного программного обеспечения JWT, IdentityModel (библиотека JWT за промежуточным программным обеспечением JWT) выдает «SecurityTokenInvalidSignatureException» ('IDX10500: проверка подписи не была выполнена. Для проверки подлинности не было обеспечено никаких ключей безопасности), и ваши пользователи никогда не будут аутентифицированы. – Pinpoint