0
votes

Politique CORS dans ASP .net core3.1

J'ai le code API suivant dans .net core

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.IO.IOException: IDX20804: Unable to retrieve document from: 'https://login.microsoftonline.com/common/.well-known/openid-configuration'.
 ---> System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it.
 ---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it.
   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---

et ma méthode Configure comme

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
............
....
    url: request.url.replace('http://','https://')
}

Je reçois un Accès à XMLHttpRequest à ' https: // apiservername / api / mycall ' depuis l'origine 'https: domain.com .xx 'a été synchronisé par la stratégie CORS: aucun en-tête' Access-Control-Allow-Origin 'n'est présent sur la ressource demandée.

Le client est dans Angular 7 et la méthode que je suis l'appel est la méthode POST. Je l'ai toujours travaillé avec http. Du côté client de l'intercepteur, j'ajoute

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                //app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseCors("CorsPolicy");
            app.UseMvc();
        }

en me demandant s'il me manque quelque chose ici. Le site client (en angulaire) et le côté API (.NET Core ASP 3.1) sont configurés en https. ---édité-- J'ai activé la gestion des exceptions et après cela, j'ai reçu l'erreur ci-dessous de la part de l'observateur d'événements.

public void ConfigureServices(IServiceCollection services)
{
..............
services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                                    builder => builder
                                    .AllowAnyMethod()
                                    .AllowAnyHeader()
                                    .WithOrigins("https://domain.com.xx")
                                    .AllowCredentials()
                                 );
            });

            services.AddControllers();
            services.AddMvc().AddMvcOptions(x=>x.EnableEndpointRouting = false);
}

Cela signifie-t-il que le problème concerne l'authentification du jeton? J'utilise Azure AD pour authentifier la connexion, puis la valider pour utiliser les WebAPI asp .net core.


7 commentaires

Dans la méthode configure, pouvez-vous déplacer le code app.UseCors ("CorsPolicy") au-dessus de app.UseAuthentication ()?


Je l'ai poussé vers le haut, mais le résultat est le même. Je peux voir le pack avec des détails dans Fiddler, mais j'obtiens toujours le même problème


Quel est le code d'état HTTP de la réponse? Vous pouvez utiliser le volet Réseau dans les outils de développement du navigateur pour vérifier. Est-ce une erreur 4xx ou 5xx plutôt qu'une réponse de succès 200 OK?


Fonctionne-t-il bien avec '.AllowAnyOrigin ()'


voir si cela aide stackoverflow.com/questions/60091440/...


Salut Bob, mes cors n'étaient pas dans l'ordre spécifié par ce fil, et je l'ai réorganisé comme mentionné, mais toujours inutile. Il indique que "L'accès à XMLHttpRequest à 'https: à partir de l'origine ' a été bloqué par la stratégie CORS: aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée.


Bonjour @sideshowbarker après avoir mis app.UseExceptionHandler (errorApp => {errorApp.Run (async context => {var errorFeature = context.Features.Get (); var exception = errorFeature.Error; context.Response. Headers.Add ("Access-Control-Allow-Origin", "*"); await Task.CompletedTask;});}); J'ai obtenu une réponse d'erreur de serveur 500 dans le panneau devtools de Chrome


3 Réponses :


-1
votes

Essayez plutôt ceci. Avec les origines ("domain.com.xx")


1 commentaires

Salut Duy, j'ai changé, mais malheureusement le résultat est le même .. c'est bloqué



0
votes

Essayez ceci pour voir si cela fonctionne pour vous. Ignorez simplement la partie MVC Je veux juste passer la commande car la commande du pipeline est importante

public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}


5 commentaires

Le mien est un point de terminaison donc pas de MVC, mais donnant toujours le même problème que l'en-tête Access-Control-Allow-origin 'est présent sur la source demandée


quand je donne tout comme localhost cela fonctionne .. mon origine client est https:localhost: et il n'y a pas de problème et je l'exécute localement. Ce n'est que lorsque je le change en https: que cela soulève le problème CORS et cela aussi sur le serveur. Les certificats SSL ou la façon dont SSL est configuré feront-ils une différence?


Oui, je pense que le problème vient peut-être de votre service d'hébergement, quel service d'hébergement vous utilisez?


Salut Tony .. Ceci est une application interne et hébergée en interne en utilisant un proxy inverse, nous donnons accès à certains clients. C'est une application interne.


Je pense que le problème vient du proxy



1
votes

Désolé, aurait dû publier / suivre il y a quelque temps. Le problème était le pare-feu , il devrait être ouvert. J'ai conseillé à l'équipe infra de me laisser entrer et d'accepter les informations dans le lien UnblockFirewall nous a aidés. Enfin ça marche.


0 commentaires