J'ai vécu toute une aventure pour faire fonctionner JWT sur DotNet core 2.0 (qui atteint aujourd'hui sa version finale). Il existe un tonne La documentation est abondante, mais tous les exemples de code semblent utiliser des API obsolètes et venir de Core, ce qui donne le vertige lorsqu'il s'agit de savoir comment les mettre en œuvre. J'ai essayé d'utiliser Jose, mais app. UseJwtBearerAuthentication a été déprécié, et il n'y a aucune documentation sur ce qu'il faut faire ensuite.
Est-ce que quelqu'un a un projet open source qui utilise dotnet core 2.0 qui peut simplement analyser un JWT à partir de l'en-tête d'autorisation et me permettre d'autoriser les demandes pour un jeton JWT encodé HS256 ?
La classe ci-dessous ne lève aucune exception, mais aucune demande n'est autorisée et je n'obtiens aucune indication. pourquoi ils ne sont pas autorisés. Les réponses sont des 401's vides, donc pour moi cela indique qu'il n'y a pas eu d'exception, mais que le secret ne correspond pas.
Une chose étrange est que mes jetons sont chiffrés avec l'algorithme HS256, mais je ne vois aucun indicateur permettant de l'obliger à utiliser cet algorithme où que ce soit.
Voici la classe que j'ai jusqu'à présent :
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;
}
}
}
0 votes
J'ai désactivé la validation de la signature sans changement, toutes les demandes utilisent [Authorize] 401
2 votes
Pourriez-vous poster le code complet ? ou un projet de démonstration, j'aimerais voir comment vous avez réussi à le faire fonctionner...
1 votes
github.com/mikepc/jwt-dotnet-core-2.0 :)
0 votes
Il y a un autre post qui peut vous aider. stackoverflow.com/a/48295906/8417618