Voici comment puis-je valider un jeton de porteur JWT dans le backend: Ça fonctionne bien comme Core .NET Consults avec l'autorité pour obtenir des informations requises (telles que la clé de signature) sous le capuche. Dans mon cas, il parle aux serveurs Auth0 via https: // Le problème est que mon application ne peut pas parler au serveur Auth0 quand Je le déploie dans un intranet qui n'a pas accès à Internet. Voici l'erreur que je reçois: p> J'ai essayé de nourrir la touche RSA manuellement, mais pas de la chance et de la même erreur: p> AddJwtBearer(options =>
{
options.Authority = $"https://{Configuration["Auth0:Domain"]}";
options.Audience = Configuration["Auth0:Audience"];
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateLifetime = true,
RequireSignedTokens = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = GetRsaKey(),
};
});
private SecurityKey GetRsaKey()
{
byte[] modulus = Decode("r5cpJ....-fUGjJCH1QQ");
byte[] exponent = Decode("A...AB");
var rsaParameters = new RSAParameters
{
Modulus = modulus,
Exponent = exponent
};
using var rsaProvider = new RSACryptoServiceProvider();
rsaProvider.ImportParameters(rsaParameters);
return new RsaSecurityKey(rsaProvider);
}
3 Réponses :
Puisque vous Envoyez le jeton à l'utilisateur ou ajoutez-le aux cookies. P> LI>
dans votre fichier de démarrage ne pas avoir accès à Internet code>, vous devez disposer d'une identité sur site et d'un contrôle d'accès comme
Identity Server CODE> ou créez votre propre
JWT Émetteur / Validateur code> comme suit:
code>: p> li>
ol>
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
Mais le problème est parce que vous ne pouvez pas parler à Auth0, cela signifie que vous ne pouvez pas obtenir la dernière clé publicick pour valider le jeton publié par Auth0, vous devez confirmer que votre clé publique locale est synchronisée avec les plus récents publich. par auth0. Si l'authentification est également contrôlée par vous, vous pouvez envisager d'utiliser Identity Server4 qui est une authentification locale / SSO framework, ou vous pouvez implémenter l'authentification JWT, comme indiqué ici . P> TokenValidationParameterers code> peut être utilisé dans le scénario que vous souhaitez valider les jetons sans accès au serveur émetteur. Ensuite, vous
validateSInSigningkey code> et
validateissuer code>, et enfin définir
issuersigningkey code> qui est la clé publique utilisée pour la validation des jetons JWT entrants. ici et ici A > sont des échantillons de code. p>
La réponse de Nan Yu est très précise et vous avez ces options de haut niveau: P>
Configurez une clé fixe et validez les jetons avec celui-ci à l'arrière. Cela fonctionnera pendant un certain temps, mais pourrait vraiment casser très mal à l'avenir, si les clés ne sont pas synchronisées de manière fiable, et Auth0 renouvelle les touches de signature de jeton, ce qui entraîne probablement de graves problèmes pour votre entreprise. P> LI>
Assurez-vous que votre back-end a une connectivité sortante à Auth0, en tant que fournisseur de confiance, de sorte que le système puisse fonctionner de manière fiable de la manière la plus simple et la plus standard. P> LI> ul>
Cela ressemble à un peuple et à un problème de processus plutôt que d'une technique. Je n'essaierais pas de le résoudre via des changements de code. P>
Je soupçonne que les administrateurs informatiques tentent d'appliquer une politique inutile sans Internet contre les intérêts de votre entreprise. À un niveau informatique, il est facile de blanchir uniquement les URL d'Auth0 et bloquent les autres. P>
comme prochaine étape, j'essaierais de convaincre vos parties prenantes / chefs de soutenir la configuration standard - peut-être peut-être transmettre ce post. P>
Utilisez KeyCloak Open Source SSO comme vérificateur JWT Token. C'est facile et sécurisé