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

标签 c# azure asp.net-core azure-active-directory openid

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

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

部署后,此设置最初导致应用程序尝试通过从 https://my.domain.cloudapp.azure.com 切换来对用户进行身份验证时出现问题。至 http://my.domain.cloudapp.azure.com 。结果,我的回复 URL ( https://my.domain.cloudapp.azure.com/signin-oidc ) 未被使用,并且收到了错误。

我能够使用 here 中的信息修复此问题和 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时我被正确重定向到 https://login.microsoftonline.com/ 。身份验证后,我被重定向回我的应用程序 https://my.domain.cloudapp.azure.com但 OpenID Connect 身份验证中间件似乎没有处理/signin-oidc 路由。相反,我收到了 404 错误。

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

最佳答案

我最终遇到了导致此问题的两个问题。首先,我有多个 pod 在 Kubernetes 中为我的应用程序提供服务,因此我需要 persist the encryption/decryption keys将 cookie 存储到一个中心位置。

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

关于c# - Azure AD/signin-oidc 404 - 使用 .NET Core 2.0 的 NGINX 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50645433/

相关文章:

asp.net-core - 配置 blazor wasm 和单独的 Identityserver4

asp.net-mvc - 如何在 View 中只显示用户名角色?

c# - 如何使用自动换行功能在 C#4.0 中动态设置标签框的文本?

c# - 在表单生成器自动回复器中查询自定义表

c# - 为什么要使用 Windows.Forms.Timer?

c# - EFCore Linq ThenInclude 两个外键到同一个表

c# - 将 WebAPI HttpGet 方法参数重新组合到一个对象中

powershell - 有关 Azure 服务主体 key 过期的报告

azure - 创建 Azure 运行方式帐户以实现自动化

c# - 使用 Azure CLI 在 Rider 中获取 Azure Key Vault 的访问 token