Aller au contenu
ecdsa.com
Microsoft.IdentityModel.Protocols (.NET).NET

Message d’erreur

IDX20803: Unable to obtain configuration from: 'http://keycloak:8080/realms/main/.well-known/openid-configuration'.

Également affiché sous la forme

  • System.InvalidOperationException: IDX20803: Unable to obtain configuration from:
  • IDX20108: The address specified 'http://keycloak:8080/realms/main/.well-known/openid-configuration' is not valid as per HTTPS scheme. Please specify an https address for security reasons.
  • IDX20804: Unable to retrieve document from:

Le message se poursuit par « Will retry at '…'. Exception: '…' » et le texte de l’exception interne. L’URL est votre `Authority` + `/.well-known/openid-configuration` ou votre `MetadataAddress`.

Microsoft.IdentityModel.Protocols (.NET) — ConfigurationManager<OpenIdConnectConfiguration>, used by JwtBearer and OpenIdConnect handlers

Ce que cela signifie

Le gestionnaire de configuration n’a pas pu télécharger (ou analyser) le document de découverte OpenID Connect : le gestionnaire JWT Bearer ou OpenID Connect n’a donc ni émetteur ni clés de signature. Chaque jeton est alors rejeté, généralement avec des erreurs IDX10500/IDX10503 à la suite. La véritable raison se trouve dans l’exception interne : IDX20108 lorsque l’adresse des métadonnées est en HTTP simple alors que HTTPS est exigé, IDX20804 avec une erreur réseau ou TLS dans les autres cas.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    N’autoriser les métadonnées HTTP qu’en développement

    Liez `RequireHttpsMetadata = false` à l’environnement de développement ; en production, l’autorité doit être en HTTPS, car les clés que vous téléchargez décident des jetons que vous acceptez.

    csharp
    builder.Services.AddAuthentication().AddJwtBearer(options =>
    {
        options.Authority = builder.Configuration["Auth:Authority"];
        // Plain HTTP only for local development containers; production authorities must be HTTPS.
        options.RequireHttpsMetadata = !builder.Environment.IsDevelopment();
    });
  2. 2.

    Récupérer l’URL depuis l’endroit où s’exécute l’API

    Exécutez la requête dans le conteneur ou le pod de l’API. Un 200 avec du JSON confirme le réseau et TLS ; toute autre réponse désigne la couche à corriger.

    bash
    # From inside the API container: DNS, TLS and HTTP status of the metadata URL
    curl -sS -o /dev/null -w '%{http_code} %{ssl_verify_result}\n' https://login.example.com/realms/main/.well-known/openid-configuration

Erreurs associées

Parcourir toute la base de données des erreurs de signature