2
votes

Le document de découverte IdentityServer4 renvoie 404 lorsqu'il est déployé sur un sous-itinéraire derrière un proxy inverse

Je dois changer l'URL d'un point de terminaison de découverte de ceci:

    app.Use(async (context, next) =>
    {
        context.Request.PathBase = "/identity";
        await next.Invoke();
    });

en ceci:

/identity/.well-known/openid-configuration

J'essaye de déployez ID4 sur Azure Kubernetes Service. Tout fonctionne très bien lorsque je déploie ID4 à l'adresse racine (comme http: //xxxx.europe.cloudapp .azure.com ) - Je vois la page d'accueil et je peux accéder à mon point de terminaison de découverte.

Cependant, lorsque je déploie ID4 sur un sous-itinéraire ( http://xxxx.europe.cloudapp.azure.com/identity ) Je ne peux pas accéder à oidc-configuration. J'utilise la réécriture d'URL donc lorsque je clique sur le lien pour accéder au document de découverte ( http://xxxx.europe.cloudapp.azure.com/identity/.well-known/openid-configuration ) j'obtiens HTTP404.

EDIT:

quand j'ajoute:

/.well-known/openid-configuration

tous les fichiers css / js / jpeg sont chargés correctement. C'est un progrès.

Cependant lorsque je clique sur le lien visible sur une page d'accueil (( http://xxxx.europe.cloudapp.azure.com/identity/.well-known/openid-configuration ) j'obtiens HTTP404. Quand je clique sur accorde (( http://xxxx.europe.cloudapp.azure.com/identity/grants). C'est la même histoire. Supprimer manuellement "/ identity" du lien mène toujours à 404.


1 commentaires

j'ai essayé ma mise à jour


3 Réponses :


1
votes

Vous devriez pouvoir utiliser des URI relatifs en utilisant Map Api sur IApplicationBuilder.

        app.Map("/identity", authApp =>
        {
            authApp.UseIdentityServer();
        });


6 commentaires

cela n'a pas aidé malheureusement, il renvoie toujours 404


@skyrunner Pouvez-vous essayer app.Use (async (context, next) => {context.Request.Path = "/ identity" + context.Request.Path; wait next.Invoke ();}); ? C'est un hack, je ne sais pas si cela fonctionnera. Utilisez ce middleware avant app.UseIdentityServer () .


Tout d'abord, merci pour votre aide. Cela n'a pas fonctionné aussi bien - avec ce code, même la page d'accueil n'apparaît pas. J'espérais qu'il existe peut-être une propriété IS4 avec laquelle je peux contrôler l'URL du point de terminaison de découverte. Mais je ne trouve nulle part un tel paramètre dans la documentation.


@skyrunner Il n'y a pas de propriété. Regardez ce code github.com/IdentityServer/IdentityServer4/blob/ master / src /… C'est là que j'ai eu l'idée d'utiliser Map et de changer context.Request.Path . Vous devriez essayer de comprendre pourquoi ce routage de point de terminaison ne fonctionne pas pour vous. Je viens d'essayer d'héberger localement sur IIS en tant qu'application Web et cela a fonctionné pour moi en utilisant Map .


@skyrunner De plus, les autres points de terminaison fonctionnent-ils (comme la connexion / le jeton) avant d'essayer d'apporter ces modifications? Est-ce juste une page disco qui renvoie NotFound?


votre solution fonctionne en effet dans un environnement local. Jusqu'à présent, je ne peux toujours pas le forcer à fonctionner sur Azure Kubernetes Service.



1
votes
app.UseHttpsRedirection()

1 commentaires

Cela fonctionne localement de cette façon, mais cela ne fonctionne pas sur Azure Kubernetes Service pour une raison quelconque.



0
votes

Grâce à Vidmantas et Mohamed répond, j'ai réussi à le faire fonctionner. J'ai utilisé leurs conseils et voici ce qui a finalement fonctionné pour moi:

         app.Map("/identity", authApp =>
        {
            authApp.UseStaticFiles();
            authApp.UseIdentityServer();
            authApp.UseMvcWithDefaultRoute();

        });

D'une manière ou d'une autre, cela n'a pas fonctionné correctement sans

authApp.UseMvcWithDefaultRoute ();

J'ai eu quelques problèmes dans la configuration de ma passerelle istio. Après les avoir résolus, IS4 fonctionne comme un charme dans un sous-itinéraire. Merci les gars pour vos réponses.


0 commentaires