IdentityServer4发现文档部署到反向代理后面的子例程时返回404

IdentityServer4发现文档部署到反向代理后面的子例程时返回404,identityserver4,openid-connect,Identityserver4,Openid Connect,我需要从以下位置更改发现终结点的url: /.well-known/openid-configuration 为此: /identity/.well-known/openid-configuration 我正在尝试将ID4部署到Azure Kubernetes服务。当我将ID4部署到根地址(如)时,一切都会很好——我看到了欢迎页面,可以访问我的发现端点 但是,当我将ID4部署到子例程()时,我无法访问oidc配置。我正在使用URL重写,所以当我单击链接访问发现文档()时,我得到了HTTP40

我需要从以下位置更改发现终结点的url:

/.well-known/openid-configuration
为此:

/identity/.well-known/openid-configuration
我正在尝试将ID4部署到Azure Kubernetes服务。当我将ID4部署到根地址(如)时,一切都会很好——我看到了欢迎页面,可以访问我的发现端点

但是,当我将ID4部署到子例程()时,我无法访问oidc配置。我正在使用URL重写,所以当我单击链接访问发现文档()时,我得到了HTTP404

编辑:

当我加上:

    app.Use(async (context, next) =>
    {
        context.Request.PathBase = "/identity";
        await next.Invoke();
    });
所有css/js/jpeg文件都已正确加载。这就是进步


但是,当我单击欢迎页面上可见的链接(())时,我得到了HTTP404。当我单击grants(())时,情况是一样的。手动从链接中删除“/identity”仍然会导致404。

您应该能够使用
iaapplicationbuilder
上的
Map
Api来使用相对URI

        app.Map("/identity", authApp =>
        {
            authApp.UseIdentityServer();
        });
  • Github问题
编辑:

也尽量不要使用

app.UseHttpsRedirection()

将HTTPS留给代理服务器

多亏了Vidmantas和Mohamed answers,我成功地实现了它。我使用了他们的建议,下面是它最终对我起作用的原因:

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

        });
不知怎的,没有它就不能正常工作

authApp.UseMvcWithDefaultRoute()


我的istio网关配置中有一些问题。解决这些问题后,IS4就像子例程中的符咒一样工作。谢谢你们的回答。

它没有帮助,不幸的是,它仍然返回404@skyrunner您可以尝试
app.Use(异步(上下文,下一步)=>{context.Request.Path=“/identity”+context.Request.Path;等待下一步。Invoke();})这是一个黑客攻击,我不知道它是否会起作用。在
app.UseIdentityServer()之前使用这个中间件
。首先,感谢您的帮助。这不起作用-使用此代码,甚至欢迎页面都不会出现。我希望有一个IS4属性可以控制发现端点url。但是我在文档中找不到这样的设置。@skyrunner没有属性。看看这段代码,这就是我想到使用
映射的地方
和更改
上下文.Request.Path
。你应该试着理解为什么这个端点路由对你不起作用。我刚刚尝试在IIS上以web应用程序的形式本地托管,使用
Map
@skyrunner对我有效。还有,做其他端点工作(比如连接/令牌)在您尝试进行这些更改之前?是否只是返回NotFound的disco页面?它以这种方式在本地工作,但由于某些原因在Azure Kubernetes服务上不工作。是否尝试了“我的更新”
         app.Map("/identity", authApp =>
        {
            authApp.UseStaticFiles();
            authApp.UseIdentityServer();
            authApp.UseMvcWithDefaultRoute();

        });