我有一个.NET Core 2.0网站,在Linux上运行,监听端口5000,位于NGinX反向代理后面,该代理监听端口80和442。NGinX配置为将HTTP通信重定向到HTTPS,并处理所有通过HTTPS进行的通信。 NGinx反向代理和Asp.Net Core应用位于共享网络中各自的docker容器中。

该设置当前正在按所述方式工作。

但是,我现在想针对我们的Azure Active Directory验证我的用户。我遇到了一个问题,不知道从这里去哪里。

首先,让我向您展示如何配置其中的大部分功能,然后再解释我的错误。

NGinx(nginx.conf)

worker_processes 2;

events { worker_connections 1024; }

http {
    sendfile on;

    upstream docker-dotnet {
        server mycomp_prod:5000;
    }

    server {
            listen 80;
            server_name sales.mycompany.com;
            return 301 https://$host$request_uri;
    }

    server {
        listen 443 ssl;
        server_name sales.mycompany.com;
        ssl_certificate     /etc/nginx/ssl/combined.crt;
        ssl_certificate_key /etc/nginx/ssl/salesmycompany.key;

        location / {
            proxy_pass         http://docker-dotnet;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }

}

Dotnet:Startup.cs ConfigureServices()
services.AddAuthentication(sharedOptions =>
{
     sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
     sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddAzureAd(options => Configuration.Bind("AzureAd", options))
.AddCookie();

Dotnet:Startup.cs Configure()
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();

点网:appsettings.json
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "mycompany.com",
    "TenantId": "my-tenant-id",
    "ClientId": "my-client-id",
    "CallbackPath": "/signin-oidc"
  },

在“我的Azure Active Directory”中,是entt

我已经配置了2个“回复URL”
  • https://sales.mycompany.com/signin-oidc
  • https://sales.mycompany.com

  • 现在针对错误/我的问题

    当我访问该网站时,我登录。随后登录,然后选择是否“保持登录状态”,我被带到出现错误的页面。

    azure - .Net Core 2.0-Azure Active Directory-NGinX反向代理-HTTP-LMLPHP

    您可以在错误中看到尝试重定向到的答复地址是HTTP,而不是HTTPS。我认为这是来自appsettings.json中的一行,内容为:
    "CallbackPath": "/signin-oidc"
    

    而且由于我的.NET Core站点(通过端口5000上的Kestrel)不在HTTPS上,因此它正在尝试加载http://example.com /signin-oidc 而不是HTTPS。请记住,我的.NET Core站点位于NGinX反向代理的后面,该代理配置为处理443上的流量。

    谢谢,

    最佳答案

    我看到了这一点,并能够使其正常工作:https://github.com/aspnet/Security/issues/1702

            var fordwardedHeaderOptions = new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            };
            fordwardedHeaderOptions.KnownNetworks.Clear();
            fordwardedHeaderOptions.KnownProxies.Clear();
    
            app.UseForwardedHeaders(fordwardedHeaderOptions);
    

    10-06 05:27
    查看更多