【发布时间】:2018-08-30 15:30:30
【问题描述】:
我有一个 AspNet Core 2.0 应用程序,它使用 OpenIdConnect API 通过 Azure AD 授权用户。 Azure App Entry 的回调 uri 定义为 https://localhost:44369/signin-oidc 和 https://domain.tld/signin-oidc。当我使用 IIS Express 在 localhost 上部署我的应用程序时,一切正常,我可以正确地对用户进行身份验证。
当我将我的应用程序部署到将 Nginx 配置为反向代理的 Linux 系统时,应用程序身份验证不起作用。 Azure AD 显示以下错误消息:
AADSTS50011:回复地址“http://domain.tld/signin-oidc”确实 与为应用程序配置的回复地址不匹配。更多的 详细信息:未指定
显然,我的应用程序告诉 Azure AD 重定向回 http 地址,但 Azure AD 拒绝这样做(幸运的是)。我想问题是我的应用认为它使用 http,因为它在 http://localhost:5000/ 上侦听反向代理。
public void Configure(string name, OpenIdConnectOptions options)
{
options.ClientId = _azureOptions.ClientId;
options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}";
options.UseTokenLifetime = true;
options.CallbackPath = _azureOptions.CallbackPath;
options.RequireHttpsMetadata = true;
}
这是我用来配置 OpenIdConnect 的代码。为 CallbackPath 指定绝对路径会导致异常。有没有其他方法可以告诉 OpenIdConnect 始终使用 https 作为 CallbackPath?
如果我的 Nginx 配置不正确,这是我的配置的一部分:
location / {
# redirect to ASP.NET application
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $http_host;
proxy_cache_bypass $http_upgrade;
}
非常感谢任何帮助!
【问题讨论】:
-
这是您要找的答案吗? stackoverflow.com/a/44907445
-
Azure B2C 也受此影响,当放置在指向 Linux 托管的 AspNet Core 2.1 应用程序的 Nginx 反向代理后面时。生成的回复 URL 是 HTTP 而不是 HTTPS。 Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler ...消息包含错误:'redirect_uri_mismatch',error_description:'AADB2C90006:请求中提供的重定向URI ...未为客户端ID注册
标签: nginx asp.net-core azure-active-directory openid