AspNetCore Azure AD Connect 回调 URL 是 http,不是 https
AspNetCore Azure AD Connect Callback URL is http, not https
我有一个 AspNet Core 2.0 应用程序,它使用 OpenIdConnect API 向用户授权 Azure AD。 Azure App Entry 的回调 uri 定义为 https://localhost:44369/signin-oidc and https://domain.tld/signin-oidc。当我使用 IIS Express 在本地主机上部署我的应用程序时,一切正常,我可以正确地对用户进行身份验证。
当我将应用程序部署到 Linux 系统时,Nginx 配置为应用程序身份验证的反向代理不起作用。 Azure AD 显示以下错误消息:
AADSTS50011: The reply address 'http://domain.tld/signin-oidc' does
not match the reply addresses configured for the application. More
details: not specified
显然我的应用程序告诉 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;
}
非常感谢任何帮助!
我发现一个带有 post 的链接问题解决了这个问题。 post 指示在 app.UseAuthentication();
之前插入以下内容
var fordwardedHeaderOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
fordwardedHeaderOptions.KnownNetworks.Clear();
fordwardedHeaderOptions.KnownProxies.Clear();
app.UseForwardedHeaders(fordwardedHeaderOptions);
将此与您的 Nginx 配置相结合;它必须转发此信息:
#
# Proxy WEB
#
location / {
proxy_pass http://<snip>;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
为了彻底,我已经尝试转发header信息,但无济于事。这两行起到了作用:
fordwardedHeaderOptions.KnownNetworks.Clear();
fordwardedHeaderOptions.KnownProxies.Clear();
感谢 charlierlee over in this post。
我有一个 AspNet Core 2.0 应用程序,它使用 OpenIdConnect API 向用户授权 Azure AD。 Azure App Entry 的回调 uri 定义为 https://localhost:44369/signin-oidc and https://domain.tld/signin-oidc。当我使用 IIS Express 在本地主机上部署我的应用程序时,一切正常,我可以正确地对用户进行身份验证。
当我将应用程序部署到 Linux 系统时,Nginx 配置为应用程序身份验证的反向代理不起作用。 Azure AD 显示以下错误消息:
AADSTS50011: The reply address 'http://domain.tld/signin-oidc' does not match the reply addresses configured for the application. More details: not specified
显然我的应用程序告诉 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;
}
非常感谢任何帮助!
我发现一个带有 post 的链接问题解决了这个问题。 post 指示在 app.UseAuthentication();
var fordwardedHeaderOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
};
fordwardedHeaderOptions.KnownNetworks.Clear();
fordwardedHeaderOptions.KnownProxies.Clear();
app.UseForwardedHeaders(fordwardedHeaderOptions);
将此与您的 Nginx 配置相结合;它必须转发此信息:
#
# Proxy WEB
#
location / {
proxy_pass http://<snip>;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
为了彻底,我已经尝试转发header信息,但无济于事。这两行起到了作用:
fordwardedHeaderOptions.KnownNetworks.Clear();
fordwardedHeaderOptions.KnownProxies.Clear();
感谢 charlierlee over in this post。