0
votes

ASP.NET CORE: Comment valider un JWT sans accès à Internet

Voici comment puis-je valider un jeton de porteur JWT dans le backend: xxx pré>

Ç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: // .Auth0.com / .well-connu / openid-configuration. P>

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> xxx pré>

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);
        }


1 commentaires

Utilisez KeyCloak Open Source SSO comme vérificateur JWT Token. C'est facile et sécurisé


3 Réponses :


1
votes

Puisque vous 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:

  1. Obtenez une clé privée. LI>
  2. Chaque fois que l'utilisateur se connecte, génère un jeton de sécurité JWT: LI> ol> xxx pré>
    1. SERIALISEZ LE JWT (à partir de l'étape 2): LI> ol> xxx pré>
      1. Envoyez le jeton à l'utilisateur ou ajoutez-le aux cookies. P> LI>

      2. dans votre fichier de démarrage code>: p> li> ol> xxx pré>

        1. Sécurisez vos contrôleurs en ajoutant: LI> OL>
          [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
          


0 commentaires

1
votes

TokenValidationParameterers peut être utilisé dans le scénario que vous souhaitez valider les jetons sans accès au serveur émetteur. Ensuite, vous ne peut pas Définir l'autorité , réglage validateSInSigningkey et validateissuer , et enfin définir issuersigningkey qui est la clé publique utilisée pour la validation des jetons JWT entrants. ici et ici sont des échantillons de code.

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 .


0 commentaires

1
votes

La réponse de Nan Yu est très précise et vous avez ces options de haut niveau:

  • 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.

  • 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.

    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.

    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.

    comme prochaine étape, j'essaierais de convaincre vos parties prenantes / chefs de soutenir la configuration standard - peut-être peut-être transmettre ce post.


0 commentaires