9
votes

Comment réparer l'erreur "IDX20804: Impossible de récupérer le document à partir de:" [PII is hidden] "" dans C #

Essayer d'obtenir un jeton d'accès pour utiliser MS Graph dans mon WebApi. Mais continuez à recevoir cette erreur,

[TaskCanceledException: Une tâche a été annulée.] System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche tâche) +167. .

[IOException: IDX20804: Impossible de récupérer le document de: '[PII is caché]'.] Microsoft.IdentityModel.Protocols.d__8.MoveNext () +662 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche tâche) +99. . [InvalidOperationException: IDX20803: impossible d'obtenir configuration à partir de: '[PII is hidden]'.] Microsoft.IdentityModel.Protocols.d__24.MoveNext () +1586 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (tâche tâche) +99

J'ai essayé toutes les corrections que j'ai pu trouver en ligne.

J'utilise ce repo < / a> comme référence pour la partie auth.

Comment puis-je résoudre ce problème?


1 commentaires

Les résultats de la recherche montrent de nombreuses raisons différentes pour cette erreur. J'obtiens cette erreur lors du test des échantillons IdentityServer4 la deuxième fois. Auparavant, tous les échantillons originaux fonctionnaient. Le premier échantillon (informations d'identification du client) a également fonctionné aujourd'hui. Mais après l'installation de Telerik Fiddler, tout cela était cassé. Fiddler a demandé à cliquer sur un bouton pour configurer certaines valeurs par défaut du système. Cela a fait quelque chose dont je ne me souviens pas, mais j'ai immédiatement arrêté d'utiliser le violoneux. Ensuite, après avoir obtenu cette erreur, j'ai redémarré l'ordinateur et maintenant tout fonctionne correctement.


3 Réponses :


3
votes

Pareil ici, j'ai lu ce qui suit sans succès. Ma configuration fonctionnait mais j'essaie de la charger sur une machine différente et je rencontre ce problème.

Voici la trace de la pile, j'ai obtenu les statuts http 400 et 404 pour les deux applications différentes que j'exécutais. p>

{
  "AzureAd": {
    "TenantId": "SOMETHING.onmicrosoft.com",
    "ClientId": "SOMETHING",
    "ClientSecret": "SOMETHING"

  }
}
System.InvalidOperationException: IDX20803: Unable to obtain configuration from: '[PII is hidden]'. ---> System.IO.IOException: IDX20804: Unable to retrieve document from: '[PII is hidden]'. ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)   --- End of inner exception stack trace ---
   at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)   at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel)
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   --- End of inner exception stack trace ---
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleChallengeAsync(AuthenticationProperties properties)
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.ChallengeAsync(AuthenticationProperties properties)
   at Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, String scheme, AuthenticationProperties properties)
   at Microsoft.AspNetCore.Mvc.ChallengeResult.ExecuteResultAsync(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAlwaysRunResultFilters()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Builder.Extensions.MapWhenMiddleware.Invoke(HttpContext context)
   HIDDEN LINE
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.FeaturePolicy.FeaturePolicyMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.ReferrerPolicy.ReferrerPolicyMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.XContentTypeOptions.XContentTypeOptionsMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.XXssProtection.XXssProtectionMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.XFrameOptions.XFrameOptionsMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.Csp.CspMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

Autres articles traitant de cette erreur.

https://github.com/IdentityServer/IdentityServer4/issues/2337

https://github.com/IdentityServer/IdentityServer4/issues/2672

https://github.com/okta/samples-aspnetcore/issues/10

https://github.com/IdentityServer/IdentityServer4/issues/2186 p>

Solution: Il s'avère que je n'avais pas configuré AzureAD dans appsettings.json . J'avais oublié de définir mes User Secrets pour configurer AzureAD avec des informations d'identification valides.

 enter image description here

Vous devrez définir les informations d'identification ci-dessous sur les vôtres pour AzureAd.

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: '[PII is hidden]'. ---> System.IO.IOException: IDX20804: Unable to retrieve document from: '[PII is hidden]'. ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 400 (Bad Request).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)   --- End of inner exception stack trace ---
   at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)   at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel)
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   --- End of inner exception stack trace ---
   at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)
   at Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler.HandleChallengeAsync(AuthenticationProperties properties)
   at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.ChallengeAsync(AuthenticationProperties properties)
   at Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, String scheme, AuthenticationProperties properties)
   at Microsoft.AspNetCore.Mvc.ChallengeResult.ExecuteResultAsync(ActionContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeResultAsync(IActionResult result)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAlwaysRunResultFilters()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Builder.Extensions.MapWhenMiddleware.Invoke(HttpContext context)
   HIDDEN LINE
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.FeaturePolicy.FeaturePolicyMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.ReferrerPolicy.ReferrerPolicyMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.XContentTypeOptions.XContentTypeOptionsMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.XXssProtection.XXssProtectionMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.XFrameOptions.XFrameOptionsMiddleware.Invoke(HttpContext context)
   at Joonasw.AspNetCore.SecurityHeaders.Csp.CspMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)


3 commentaires

Vous pouvez obtenir un message d'erreur plus détaillé lors de la définition de l'indicateur suivant: IdentityModelEventSource.ShowPII = true;


Où mettriez-vous votre «drapeau»?


@ RubenSzekér dans une application ASP.NET, vous pouvez le mettre dans Application_Start () de Global.asax.cs. Dans un .Net Core, vous pouvez l'ajouter dans ConfigureServices () de Startup.cs



0
votes

J'avais le même problème, c'est parce qu'il doit passer par DockerNAT. (Il se peut que tout le monde n'obtienne pas cette adresse IP)

Voici comment j'ai résolu mon problème:

  1. Ouvrir l'invite de commande
  2. Tapez ipconfig

Vous obtiendrez quelque chose comme ceci.

Configuration IP Windows

Adaptateur Ethernet vEthernet (DockerNAT):

Suffixe DNS spécifique à la connexion . :

Adresse IPv4. . . . . . . . . . . : 10.0.75.1

Masque de sous-réseau. . . . . . . . . . . : 255.255.255.240

Passerelle par défaut. . . . . . . . . :

  1. Copiez essentiellement cette adresse IP dans votre fichier docker-compose.yml

    services:

    webmvc:

            var identityUrl = Configuration.GetValue<string>("IdentityUrl");
            services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie()
            .AddOpenIdConnect(options => {
                options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;             
                options.Authority = identityUrl.ToString();
                options.SignedOutRedirectUri = "http://localhost:5200/"; //Change to your mvc address
                options.ClientId ="mvc";
                options.ClientSecret = "secret";
                options.ResponseType =  "code id_token";
                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;
                options.RequireHttpsMetadata = false;
                options.Scope.Add("openid");
                options.Scope.Add("profile");
                options.Scope.Add("offline_access");
                options.TokenValidationParameters = new TokenValidationParameters()
                {
                    NameClaimType = "name",
                    RoleClaimType = "role"
                };
            });
    
  2. Les autres points à vérifier sont:

Assurez-vous que sur votre Startup.cs sous ConfigureServices (projet WebMvc) vous avez les éléments suivants et qu'ils sont correctement orthographiés sur votre fichier yml.

build:

  context: .\src\Web\WebMvc

  dockerfile: Dockerfile

environment:

  - IdentityUrl=http://10.0.75.1:5000/ #Change IP and Port

container_name: test

ports:

  - "5200:80"

networks:

  - frontend

depends_on:

  - tokenserver #your identityserver4 service
  1. En plus de cela, vous souhaiterez peut-être ouvrir des ports sur votre pare-feu. Dans mon cas, j'ai dû ouvrir le port 5000.

a. Ouvrez le panneau de configuration

b. Système et sécurité

c. Pare-feu Windows Defender

d. Paramètres avancés

e. Paramètres entrants => Nouvelle règle ..

f. Type de règle => Port ==> Cliquez sur Suivant

g. Sélectionnez TCP sous protocole

h. Ports locaux spécifiques => Entrez 5000

i. Cliquez sur Suivant => Sélectionnez Autoriser la connexion

j. Cliquez sur Suivant

k. J'ai laissé tout coché sous Quand la règle s'applique-t-elle?

l. Cliquez sur Suivant => Entrez le port Docker => Cliquez sur Terminer


0 commentaires

2
votes

J'ai eu une erreur similaire lors de la création d'une nouvelle application Blazor -> Application serveur Blazor avec des comptes d'utilisateurs individuels -> Connectez-vous à un magasin d'utilisateurs existant dans le cloud (Azure AD B2C).

 entrez la description de l'image ici

IOException: IDX20807: Impossible de récupérer le document de: '[PII is caché. Pour plus de détails, reportez-vous à https://aka.ms/IdentityModel/PII.] '. HttpResponseMessage: '[PII est caché. Pour plus de détails, consultez https://aka.ms/IdentityModel/PII.] ', HttpResponseMessage.Content: '[Les informations personnelles sont masquées. Pour plus de détails, consultez https://aka.ms/IdentityModel/PII.] ". Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync (chaîne adresse, CancellationToken annuler)

InvalidOperationException: IDX20803: impossible d'obtenir la configuration from: '[PII est masqué. Pour plus de détails, consultez https://aka.ms/IdentityModel/PII.] ". Microsoft.IdentityModel.Protocols.ConfigurationManager.GetConfigurationAsync (CancellationToken annuler)

Assurez-vous que le domaine est défini sur votre domaine Azure AD B2C et non sur l ' URI de l'ID d'application complet dans appsettings.json . Par exemple, utilisez .onmicrosoft.com au lieu de .onmicrosoft.com / api . Regardez également AzureAdB2C -> Instance dans appsettings.json . J'ai eu la valeur https://login.microsoftonline.com/tfp définie ici par défaut mais cela ne fonctionne pas, quand je l'ai changé en https: // . b2clogin.com/tfp/ tout a commencé à fonctionner.


2 commentaires

Si vous votez contre, veuillez dire pourquoi. Très difficile d'améliorer les réponses autrement.


Cette solution a résolu mon problème. en utilisant Blazor Server