Azure AD /signin-oidc 404 - .NET Core 2.0 的 NGINX 反向代理

Azure AD /signin-oidc 404 - NGINX reverse proxy with .NET Core 2.0

我在具有 Linux 个容器的 Kubernetes 集群中有一个 .NET Core 2.0 应用程序 运行。在应用程序前面,我有一个 Nginx 反向代理,它设置了 LetsEncrypt、SSL 终止和将 http 转发到应用程序。

我的应用成功地在本地进行了身份验证和重定向(没有反向代理),并且基于此处的示例表单: https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore

部署时,此设置最初导致应用程序出现问题,该应用程序试图通过从 https://my.domain.cloudapp.azure.com to http://my.domain.cloudapp.azure.com. As a result my reply URL (https://my.domain.cloudapp.azure.com/signin-oidc 切换来验证用户身份)未被使用,我收到了一个错误。

我能够使用来自 and here 的信息解决这个问题,特别是我添加了:

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

app.Use(async (context, next) =>
{
    if (context.Request.Host.Host.ToLower() != "localhost")
      context.Request.Scheme = "https";
    await next.Invoke();
});

现在,当我转到 https://my.domain.cloudapp.azure.com I'm redirected properly to https://login.microsoftonline.com/. After authenticating I'm redirected back to my app at https://my.domain.cloudapp.azure.com 但 OpenID Connect 身份验证中间件似乎没有处理 /signin-oidc 路由。我反而收到了 404 错误。

有人知道我做错了什么吗?

我最终遇到了导致此问题的两个问题。首先,我有多个 pods 在 Kubernetes 中为我的应用程序提供服务,因此我需要 将 cookie 放到一个中央位置。

第二个问题是反向代理正在重写回复 url。自从我原来的 post 以来,我的项目发生了一些变化,我切换到 OAuth2 代理,所以我不确定我原来的 post 中 Nginx 的确切场景。但是,对于 Oauth2 代理,我必须在我的应用程序注册中添加“https://my.domain.cloudapp.azure.com/oauth2/callback”作为回复 url。