我已经制作了一个asp.net核心应用程序,并试图通过反向代理将其托管在Apache中。该应用程序使用Cookie身份验证:

app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
  AuthenticationScheme = "CookieAuthentication",
  LoginPath = new PathString("/Account/Login/"),
  AccessDeniedPath = new PathString("/Account/Forbidden/"),
  AutomaticAuthenticate = true,
  AutomaticChallenge = true
});


在httpd.conf中,我想使用一个具有自定义端口的仅SSL主机,该端口可提供来自Kestrel的内容。

Listen 34567

<VirtualHost *:34567>
  ProxyPreserveHost On
  ProxyPass / http://127.0.0.1:5000/
  ProxyPassReverse / http://127.0.0.1:5000/
  SSLEngine on
  SSLProtocol all -SSLv3
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
  SSLCertificateFile certs/server.crt
  SSLCertificateKeyFile certs/server.key
</VirtualHost>


当我使用URL https://testserver1:34567时,它会重定向到http://testserver1:34567/Account/Login/?ReturnUrl=%2F,这当然会给出错误的请求。如果我通过将网址更改为https来更正该网址,则之后一切正常。

我如何才能使其始终重定向到https url?

最佳答案

我解决我的方法是将所有http请求(包括路由)重定向到https请求。

这是我的整个Apache配置文件。

<VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ServerName mydomain.com

    ProxyPass / http://127.0.0.1:5000/
    ProxyPassReverse / http://127.0.0.1:5000/
    ErrorLog /var/log/httpd/netcore-error.log
    CustomLog /var/log/httpd/netcore-access.log common
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!RC4+RSA:+HIGH:+MEDIUM:!LOW:!RC4
    SSLCertificateFile /etc/letsencrypt/live/mydomain.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/mydomain.com/chain.pem
</VirtualHost>


其中的键是VirtualHost *:80部分,因为它是重定向请求的部分。另一个只是消耗它们的问题。

关于apache - 使用SSL和Cookie身份验证重定向的Apache中的ASP.NET Core托管,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44840665/

10-10 14:37
查看更多