在Chrome浏览器上无法使用SAML登录到在Docker上构建的Nextcloud的问题

首先

我考虑在家庭服务器上运行Nextcloud和GitLab,并通过SSO进行使用。作为第一步,我进行了Keycloak和Nextcloud的配置。在完成配置后,问题出现在我试图在Google Chrome中进行登录时。

这次的服务器配置是:

    • Nginx: リバースプロキシ

 

    • Keycloak: IdPサーバ

 

    Nextcloud: SP

在反向代理的后面设置Keycloak和Nextcloud,例如,当访问http://localhost:8080/keycloak时,将显示Keycloak的管理界面。

产生的问题
de

我在Nextcloud的登录页面上点击了SSO&SAML登录按钮,并使用Keycloak进行了登录。登录后,被重定向到Nextcloud,但在那里经过了多个页面后又回到了最初的登录页面。

nextcloud-login-page-saml.jpg

当我检查Keycloak的管理界面时,发现会话信息已经被保存,这表明登录本身是正常进行的。

我尝试清除缓存,尝试使用隐私模式,但仍然无法成功。然而,当我将浏览器更改为Firefox后,成功地登录到了Nextcloud。

我认为这可能是因为Google Chrome存在问题。

问题的起因

当我查看Chrome浏览器的控制台时,显示了以下的错误信息。

Mark cross-site cookies as Secure to allow setting then in cross-site contexts

听说为了增强安全性,在不同的源之间使用HTTP通信时,无法保存cookie。

如下所示:
方法
解策
解套

这次我决定使用自己的服务器进行https通信,并使用所谓的自签名证书。

FROM nginx:1.25.1

WORKDIR /etc/nginx

RUN openssl req -new -days 365 -x509 -nodes -keyout cert.key -out cert.crt -subj "/"

RUN service nginx start

由于在/etc/nginx目录下创建了证书和私钥,因此将根据此进行Nginx配置的更改。

# 省略
  server {
    listen 443 ssl;
    ssl_certificate      /etc/nginx/cert.crt;
    ssl_certificate_key  /etc/nginx/cert.key;
    # 省略
  }

由于更改协议,URL也会发生变化,因此需要对对应的Keycloak和Nextcloud进行设置更改。

启动容器并通过HTTPS访问Nextcloud的登录页面。尽管会显示一个自我签名的警告信息,但请忽略它并继续进行再次登录。然后,您可以使用SAML在Google Chrome中进行登录。

nextcloud-saml-login-success.jpg
bannerAds