使用 SAML、Keycloak 和 Nextcloud 的单点登录
SSO with SAML, Keycloak and Nextcloud
我正在尝试将 Keycloak 设置为 IdP(身份提供者)并将 Nextcloud 设置为服务。我想设置 Keycloak 以显示 SSO(单点登录)页面。
我是 运行 一台 Linux-服务器,具有 Intel 兼容 CPU。正确的配置是什么?
- Keycloak 将 运行 为 https://kc.domain.com
- Nextcloud 将 运行 为 https://nc.domain.com
先决条件:
要使用此答案,您需要将 domain.com
替换为您 拥有的 的 实际 域。另外,将 email@domain.com
替换为您的工作电子邮件地址。
假定您安装了 docker 和 docker-compose 并且 运行ning.
使用 Docker
设置您的服务
除了 keycloak 和 nextcloud 我还使用:
- nginx 作为反向代理
- letsencyrpt 为子域生成 SSL 证书。
我正在使用 docker 和 docker-compose 设置所有需要的服务。这就是 docker-compose.yml
的样子:
version: '2'
nginx-proxy:
image: jwilder/nginx-proxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- "/etc/nginx/vhost.d"
- "./proxy-default.conf:/etc/nginx/conf.d/my-proxy.default.conf:ro"
- "/usr/share/nginx/html"
- "/var/run/docker.sock:/tmp/docker.sock:ro"
- "./le-cert:/etc/nginx/certs:ro"
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: unless-stopped
depends_on:
- nginx-proxy
container_name: le-proxy-companion
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./le-cert:/etc/nginx/certs:rw"
volumes_from:
- nginx-proxy
keycloak:
image: jboss/keycloak
links:
- keycloak-postgres:postgres
ports:
- 8080:8080
volumes:
- ./keycloak:/opt/jboss/keycloak
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- "PROXY_ADDRESS_FORWARDING=true"
- VIRTUAL_PORT=8080
- VIRTUAL_HOST=kc.domain.com
- LETSENCRYPT_HOST=kc.domain.com
- LETSENCRYPT_EMAIL=email@domain.com
keycloak-postgres:
image: postgres
environment:
- POSTGRES_DB=keycloak
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=keycloak
nextcloud:
image: hoellen/nextcloud
environment:
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- CRON_PERIOD=15m
- TZ=Europe/Berlin
- DOMAIN=nc.domain.com
- ADMIN_USER=admin
- ADMIN_PASSWORD=admin
- DB_TYPE=mysql
- DB_NAME=nextcloud
- DB_USER=nextcloud
- DB_PASSWORD=nextcloud
- DB_HOST=nc-db
volumes:
- ./nc/nc-data:/data
- ./nc/nc-config:/config
- ./nc/nc-apps:/apps2
- ./nc/nc-themes:/nextcloud/themes
environment:
- VIRTUAL_HOST=nc.domain.com
- LETSENCRYPT_HOST=nc.domain.com
- LETSENCRYPT_EMAIL=email@domain.com
nc-db:
image: mariadb
volumes:
- ./nc/nc-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
我将我的 docker 文件放在一个文件夹 docker
中,并在该文件夹中放置一个项目特定的文件夹。这里keycloak
。创建它们:
mkdir -p ~/docker/keycloak
使用您喜欢的编辑器在此文件夹中创建 docker-compose.yml
- 文件。启动服务:
cd ~/docker/keycloak
docker-compose up -d
稍等片刻,让服务下载并启动。检查是否一切都是 运行:
docker-compose ps
如果服务未 运行ning。发出第二个 docker-compose up -d
并再次检查。
配置Keycloak,添加新领域
打开浏览器并转到 https://kc.domain.com。单击 管理控制台 。正如您在 docker-compose.yml
中指定的那样,用户名和密码是 admin
.
在页面的左上角,您需要创建一个新的领域。单击 Add
。输入 my-realm 作为名称。单击 Save
。
单击 Keys
选项卡。查看 RSA
条目。我们需要复制该行的证书。单击 Certificate
并将内容复制粘贴到文本编辑器以备后用。
为 Nextcloud 准备私钥和证书
打开终端并发出:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
这将创建两个文件:private.key
和 public.cert
我们稍后将需要它们用于 nextcloud 服务。
配置 Nextcloud
打开浏览器并转到 https://nc.domain.com。正如您在 docker-compose.yml
中指定的那样,用户名和密码是 admin
.
您需要激活默认情况下禁用的SSO & Saml Authenticate
。
重要从这里开始不要关闭您的当前浏览器window 直到设置被测试和 运行ning。如果您在一切正常之前关闭浏览器,您可能无法再更改 nextcloud 中的设置。在这种情况下,您需要停止 nextcloud- 和 nextcloud-db-container,删除它们各自的文件夹,重新创建它们并重新开始。
单击右上角的齿轮符号,然后单击 + Apps
符号。在左侧现在可以看到带有条目 Security
的菜单栏。点击它。您现在可以看到所有与安全相关的应用程序。单击 SSO & SAML authentication
应用下方的 Activate
按钮。
再次点击右上角的齿轮符号,然后点击Admin
。单击 SSO & SAML authentication
。
使用以下值:
- 将 UID 映射到的属性:用户名
- 启用“为 Nextcloud 桌面客户端使用 SAML 身份验证(需要用户重新身份验证)”
- 将
public.cert
的内容复制到'X.509 Certificate'字段
- 将
private.key
的内容复制到 'Private key of Service Provider' 字段中。
- IdP 的标识符:https://kc.domain.com/auth/realms/my-realm
- URL SP 将向其发送身份验证请求消息的 IdP 目标:https://kc.domain.com/auth/realms/my-realm/protocol/saml
- URL SP 将发送 SLO 请求的 IdP 位置:https://kc.domain.com/auth/realms/my-realm/protocol/saml
- Public IdP 的 X.509 证书:从
my-realm
的 Keys
选项卡中复制来自 Keycloak 的证书。您需要在密钥前面添加“-----BEGIN CERTIFICATE-----”,在密钥末尾添加“-----END CERTIFICATE-----”。
- 服务提供商数据:
- 属性,显示名称:用户名
- 属性、邮箱地址:邮箱
- 安全设置,启用以下选项:
- 表示是否对该 SP 发送的 samlp:AuthnRequest 消息进行签名。 [SP 的元数据将提供此信息]
- 表示是否对该 SP 发送的 samlp:logoutRequest 条消息进行签名。
- 表示是否对该 SP 发送的 samlp:logoutResponse 条消息进行签名。
- 表示要求对该 SP 收到的 samlp:Response、samlp:LogoutRequest 和 samlp:LogoutResponse 元素进行签名。
- 表示要求对此 SP 接收的 saml:Assertion 元素进行签名。 [SP 的元数据将提供此信息]
- 检查
Download metadata XML
按钮旁边是否有一个 Metadata valid
- 单击
Download metadata XML
按钮。这会生成并发送一个 XML 文件。保存以备下一步使用。
配置 Keycloak,客户端
再次访问管理员控制台。单击 Clients
,然后单击右上角的 Create
-按钮。
在“导入”旁边,单击 Select File
按钮。 Select XML-您在 Nextcloud 的最后一步创建的文件。
变化:
- 客户端 SAML 端点:https://kc.domain.com/auth/realms/my-realm
然后单击 Save
。
您将看到一个新屏幕。更改以下字段:
- 名称:Nextcloud
- 有效的重定向 URI:https://nc.domain.com/ *
- 点击
Save
在选项卡上 Mappers
:
- 单击
Delete
-预先分配的role list
按钮(如果存在)
- 点击
Create
- 姓名:用户名
- 映射器类型:用户 属性
- 属性: 用户名
- SAML 属性名称:用户名
- SAML 属性名称格式:基本
- 点击
Save
- 点击
Create
- 姓名:电子邮箱
- 映射器类型:用户 属性
- 属性: 电子邮件
- SAML 属性名称:电子邮件
- SAML 属性名称格式:基本
- 点击
Save
- 点击
Create
- 姓名:角色
- 映射器类型:角色列表
- 角色属性名称:角色
- 友好名称:角色
- SAML 属性名称格式:基本
- 单一角色属性:开启
- 点击
Save
配置Keycloak,添加用户
- 在左侧,点击
Users
- 点击右上角的
Add users
- 设置以下值:
- 用户名:用户
- 邮箱:user@domain.com
- 点击
Save
- 在选项卡
Credentials
上:
- 新密码:用户
- 密码确认:用户
- 临时:关闭
- 点击
Reset Password
- 弹出一个Window:
- 点击
Change Password
测试运行
在 incognito/private 模式下打开新浏览器 window。例如。对于 google-chrome 按 Ctrl-Shift-N
,在 Firefox 中按 Ctrl-Shift-P
。 保持另一个浏览器window与nextcloud设置页面打开。否则你可能会把自己锁在门外。
使用 incognito/private 浏览器 window 访问 https://nc.domain.com。您会看到 keycloak username/password 页面。输入 user
作为名称和密码。您应该会看到 nextcloud 欢迎屏幕。
致谢
- 如果没有精彩的英文 http://int128.hatenablog.com/entry/2018/01/16/194048 blog entry. I've read it with google-translator,就不可能有本指南。
- 还要感谢 RMM. His wiki entry 允许我为 nextcloud 创建正确的密钥并启用消息签名,从而改进这个答案。
这是 nextcloud 15/16 的略微更新版本:
打开浏览器并转到 https://kc.domain.com。单击管理控制台。正如您在 docker-compose.yml 中指定的,用户名和密码是 admin。
在页面的左上角,您需要创建一个新领域。单击添加。输入 my-realm 作为名称。单击保存。
单击“键”选项卡。查看 RSA 条目。我们需要复制该行的证书。单击证书并将内容复制粘贴到文本编辑器以备后用。
为 Nextcloud 准备私钥和证书
打开终端并发出:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
这会创建两个文件:private.key 和 public.cert,稍后我们将需要它们用于 nextcloud 服务。
配置 Nextcloud
打开浏览器并转到 https://nc.domain.com。正如您在 docker-compose.yml 中指定的,用户名和密码是 admin。
您需要激活默认禁用的 SSO 和 Saml 身份验证。
重要 从这里开始不要关闭当前浏览器 window,直到设置被测试 运行。如果您在一切正常之前关闭浏览器,您可能无法再更改 nextcloud 中的设置。在这种情况下,您需要停止 nextcloud- 和 nextcloud-db-container,删除它们各自的文件夹,重新创建它们并重新开始。
点击右上角的齿轮符号,然后点击 + Apps 符号。在左侧现在可以看到带有条目 Security 的菜单栏。点击它。您现在可以看到所有安全相关的应用程序。单击 SSO 和 SAML 身份验证应用程序下方的激活按钮。
再次点击右上角的齿轮符号,然后点击管理员。单击 SSO 和 SAML 身份验证。
使用以下值:
Attribute to map UID to:username
Enable "Use SAML auth for the Nextcloud desktop clients (requires user re-authentication)"
Copy the content ofpublic.cert into the 'X.509 Certificate'-field
Copy the content ofprivate.key into the 'Private key of Service Provider'-field.
Identifier of the IdP: https://kc.domain.com/auth/realms/my-realm
URL Target of the IdP where the SP will send the Authentication Request Message: https://kc.domain.com/auth/realms/my-realm/protocol/saml
URL Location of IdP where the SP will send the SLO Request: https://kc.domain.com/auth/realms/my-realm/protocol/saml
Public X.509 certificate of the IdP: Copy the certificate from Keycloak from the Keys-tab of my-realm. You will need to add '-----BEGIN CERTIFICATE-----' in front of the key and '-----END CERTIFICATE-----' to the end of it.
In Identity Provider Data:
Attribute, displayname: username
Attribute, email adress: email
Attribute, Quota: nextcloudquota
Click Download metadata XML and save the file for the next step.
Security Settings, enable the following options:
Indicates whether the messages sent by this SP will be signed. [Metadata of the SP will offer this info]
Indicates whether the messages sent by this SP will be signed.
Indicates whether the messages sent by this SP will be signed.
Indicates a requirement for the , and elements received by this SP to be signed.
Indicates a requirement for the elements received by this SP to be signed. [Metadata of the SP will offer this info]
Check there is a Metadata valid beside the Download metadata XML-Button
Click the Download metadata XML-Button. This generate and send a XML file. Save it.
配置 Keycloak,客户端
再次访问管理控制台。单击“客户端”,然后单击右上角的“创建”按钮。
在导入旁边,单击 Select 文件按钮。 Select 您在 Nextcloud 的最后一步创建的 XML- 文件。
变化:
Client SAML Endpoint: https://kc.domain.com/auth/realms/my-realm
然后点击保存。
您将看到一个新屏幕。更改以下字段:
Name: Nextcloud
Valid Redirect URIs: https://nc.domain.com/ *
Click Save
在选项卡上很重要:
Click Delete-Button on the preassigned role list
Click Create
Name: username
Mapper Type: User Property
Property: username
SAML Attribute Name: username
SAML Attribute NameFormat: Basic
Click Save
Click Create
Name: email
Mapper Type: User Property
Property: email
SAML Attribute Name: email
SAML Attribute NameFormat: Basic
Click Save
点击创建
Name: Roles
Mapper Type: Role List
Role attribute name: Roles
Friendly Name: roles
SAML Attribute NameFormat: Basic
Single Role Attrubute: On
Click Save
点击创建
Name: nextcloudquota
Mapper Type: User Property
Property: nextcloudquota
SAML Attribute Name: nextcloudquota
SAML Attribute NameFormat: Basic
Click Save
配置Keycloak,添加用户
On the left side, click on Users
On the top-right, click Add users
Set the following values:
Username: user
Email: user@domain.com
Click Save
On the tab Credentials:
New Password: user
Password Confirmation: user
Temporary: Off
Click Reset Password
A Window pops up:
Click Change Password
我正在尝试将 Keycloak 设置为 IdP(身份提供者)并将 Nextcloud 设置为服务。我想设置 Keycloak 以显示 SSO(单点登录)页面。
我是 运行 一台 Linux-服务器,具有 Intel 兼容 CPU。正确的配置是什么?
- Keycloak 将 运行 为 https://kc.domain.com
- Nextcloud 将 运行 为 https://nc.domain.com
先决条件:
要使用此答案,您需要将 domain.com
替换为您 拥有的 的 实际 域。另外,将 email@domain.com
替换为您的工作电子邮件地址。
假定您安装了 docker 和 docker-compose 并且 运行ning.
使用 Docker
设置您的服务除了 keycloak 和 nextcloud 我还使用:
- nginx 作为反向代理
- letsencyrpt 为子域生成 SSL 证书。
我正在使用 docker 和 docker-compose 设置所有需要的服务。这就是 docker-compose.yml
的样子:
version: '2'
nginx-proxy:
image: jwilder/nginx-proxy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- "/etc/nginx/vhost.d"
- "./proxy-default.conf:/etc/nginx/conf.d/my-proxy.default.conf:ro"
- "/usr/share/nginx/html"
- "/var/run/docker.sock:/tmp/docker.sock:ro"
- "./le-cert:/etc/nginx/certs:ro"
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
letsencrypt-nginx-proxy-companion:
image: jrcs/letsencrypt-nginx-proxy-companion
restart: unless-stopped
depends_on:
- nginx-proxy
container_name: le-proxy-companion
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./le-cert:/etc/nginx/certs:rw"
volumes_from:
- nginx-proxy
keycloak:
image: jboss/keycloak
links:
- keycloak-postgres:postgres
ports:
- 8080:8080
volumes:
- ./keycloak:/opt/jboss/keycloak
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- "PROXY_ADDRESS_FORWARDING=true"
- VIRTUAL_PORT=8080
- VIRTUAL_HOST=kc.domain.com
- LETSENCRYPT_HOST=kc.domain.com
- LETSENCRYPT_EMAIL=email@domain.com
keycloak-postgres:
image: postgres
environment:
- POSTGRES_DB=keycloak
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=keycloak
nextcloud:
image: hoellen/nextcloud
environment:
- UPLOAD_MAX_SIZE=10G
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- CRON_PERIOD=15m
- TZ=Europe/Berlin
- DOMAIN=nc.domain.com
- ADMIN_USER=admin
- ADMIN_PASSWORD=admin
- DB_TYPE=mysql
- DB_NAME=nextcloud
- DB_USER=nextcloud
- DB_PASSWORD=nextcloud
- DB_HOST=nc-db
volumes:
- ./nc/nc-data:/data
- ./nc/nc-config:/config
- ./nc/nc-apps:/apps2
- ./nc/nc-themes:/nextcloud/themes
environment:
- VIRTUAL_HOST=nc.domain.com
- LETSENCRYPT_HOST=nc.domain.com
- LETSENCRYPT_EMAIL=email@domain.com
nc-db:
image: mariadb
volumes:
- ./nc/nc-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nextcloud
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
我将我的 docker 文件放在一个文件夹 docker
中,并在该文件夹中放置一个项目特定的文件夹。这里keycloak
。创建它们:
mkdir -p ~/docker/keycloak
使用您喜欢的编辑器在此文件夹中创建 docker-compose.yml
- 文件。启动服务:
cd ~/docker/keycloak
docker-compose up -d
稍等片刻,让服务下载并启动。检查是否一切都是 运行:
docker-compose ps
如果服务未 运行ning。发出第二个 docker-compose up -d
并再次检查。
配置Keycloak,添加新领域
打开浏览器并转到 https://kc.domain.com。单击 管理控制台 。正如您在 docker-compose.yml
中指定的那样,用户名和密码是 admin
.
在页面的左上角,您需要创建一个新的领域。单击 Add
。输入 my-realm 作为名称。单击 Save
。
单击 Keys
选项卡。查看 RSA
条目。我们需要复制该行的证书。单击 Certificate
并将内容复制粘贴到文本编辑器以备后用。
为 Nextcloud 准备私钥和证书
打开终端并发出:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
这将创建两个文件:private.key
和 public.cert
我们稍后将需要它们用于 nextcloud 服务。
配置 Nextcloud
打开浏览器并转到 https://nc.domain.com。正如您在 docker-compose.yml
中指定的那样,用户名和密码是 admin
.
您需要激活默认情况下禁用的SSO & Saml Authenticate
。
重要从这里开始不要关闭您的当前浏览器window 直到设置被测试和 运行ning。如果您在一切正常之前关闭浏览器,您可能无法再更改 nextcloud 中的设置。在这种情况下,您需要停止 nextcloud- 和 nextcloud-db-container,删除它们各自的文件夹,重新创建它们并重新开始。
单击右上角的齿轮符号,然后单击 + Apps
符号。在左侧现在可以看到带有条目 Security
的菜单栏。点击它。您现在可以看到所有与安全相关的应用程序。单击 SSO & SAML authentication
应用下方的 Activate
按钮。
再次点击右上角的齿轮符号,然后点击Admin
。单击 SSO & SAML authentication
。
使用以下值:
- 将 UID 映射到的属性:用户名
- 启用“为 Nextcloud 桌面客户端使用 SAML 身份验证(需要用户重新身份验证)”
- 将
public.cert
的内容复制到'X.509 Certificate'字段 - 将
private.key
的内容复制到 'Private key of Service Provider' 字段中。 - IdP 的标识符:https://kc.domain.com/auth/realms/my-realm
- URL SP 将向其发送身份验证请求消息的 IdP 目标:https://kc.domain.com/auth/realms/my-realm/protocol/saml
- URL SP 将发送 SLO 请求的 IdP 位置:https://kc.domain.com/auth/realms/my-realm/protocol/saml
- Public IdP 的 X.509 证书:从
my-realm
的Keys
选项卡中复制来自 Keycloak 的证书。您需要在密钥前面添加“-----BEGIN CERTIFICATE-----”,在密钥末尾添加“-----END CERTIFICATE-----”。 - 服务提供商数据:
- 属性,显示名称:用户名
- 属性、邮箱地址:邮箱
- 安全设置,启用以下选项:
- 表示是否对该 SP 发送的 samlp:AuthnRequest 消息进行签名。 [SP 的元数据将提供此信息]
- 表示是否对该 SP 发送的 samlp:logoutRequest 条消息进行签名。
- 表示是否对该 SP 发送的 samlp:logoutResponse 条消息进行签名。
- 表示要求对该 SP 收到的 samlp:Response、samlp:LogoutRequest 和 samlp:LogoutResponse 元素进行签名。
- 表示要求对此 SP 接收的 saml:Assertion 元素进行签名。 [SP 的元数据将提供此信息]
- 检查
Download metadata XML
按钮旁边是否有一个Metadata valid
- 单击
Download metadata XML
按钮。这会生成并发送一个 XML 文件。保存以备下一步使用。
配置 Keycloak,客户端
再次访问管理员控制台。单击 Clients
,然后单击右上角的 Create
-按钮。
在“导入”旁边,单击 Select File
按钮。 Select XML-您在 Nextcloud 的最后一步创建的文件。
变化:
- 客户端 SAML 端点:https://kc.domain.com/auth/realms/my-realm
然后单击 Save
。
您将看到一个新屏幕。更改以下字段:
- 名称:Nextcloud
- 有效的重定向 URI:https://nc.domain.com/ *
- 点击
Save
在选项卡上 Mappers
:
- 单击
Delete
-预先分配的role list
按钮(如果存在) - 点击
Create
- 姓名:用户名
- 映射器类型:用户 属性
- 属性: 用户名
- SAML 属性名称:用户名
- SAML 属性名称格式:基本
- 点击
Save
- 点击
Create
- 姓名:电子邮箱
- 映射器类型:用户 属性
- 属性: 电子邮件
- SAML 属性名称:电子邮件
- SAML 属性名称格式:基本
- 点击
Save
- 点击
Create
- 姓名:角色
- 映射器类型:角色列表
- 角色属性名称:角色
- 友好名称:角色
- SAML 属性名称格式:基本
- 单一角色属性:开启
- 点击
Save
配置Keycloak,添加用户
- 在左侧,点击
Users
- 点击右上角的
Add users
- 设置以下值:
- 用户名:用户
- 邮箱:user@domain.com
- 点击
Save
- 在选项卡
Credentials
上:- 新密码:用户
- 密码确认:用户
- 临时:关闭
- 点击
Reset Password
- 弹出一个Window:
- 点击
Change Password
- 点击
测试运行
在 incognito/private 模式下打开新浏览器 window。例如。对于 google-chrome 按 Ctrl-Shift-N
,在 Firefox 中按 Ctrl-Shift-P
。 保持另一个浏览器window与nextcloud设置页面打开。否则你可能会把自己锁在门外。
使用 incognito/private 浏览器 window 访问 https://nc.domain.com。您会看到 keycloak username/password 页面。输入 user
作为名称和密码。您应该会看到 nextcloud 欢迎屏幕。
致谢
- 如果没有精彩的英文 http://int128.hatenablog.com/entry/2018/01/16/194048 blog entry. I've read it with google-translator,就不可能有本指南。
- 还要感谢 RMM. His wiki entry 允许我为 nextcloud 创建正确的密钥并启用消息签名,从而改进这个答案。
这是 nextcloud 15/16 的略微更新版本:
打开浏览器并转到 https://kc.domain.com。单击管理控制台。正如您在 docker-compose.yml 中指定的,用户名和密码是 admin。
在页面的左上角,您需要创建一个新领域。单击添加。输入 my-realm 作为名称。单击保存。
单击“键”选项卡。查看 RSA 条目。我们需要复制该行的证书。单击证书并将内容复制粘贴到文本编辑器以备后用。 为 Nextcloud 准备私钥和证书
打开终端并发出:
openssl req -nodes -new -x509 -keyout private.key -out public.cert
这会创建两个文件:private.key 和 public.cert,稍后我们将需要它们用于 nextcloud 服务。 配置 Nextcloud
打开浏览器并转到 https://nc.domain.com。正如您在 docker-compose.yml 中指定的,用户名和密码是 admin。
您需要激活默认禁用的 SSO 和 Saml 身份验证。
重要 从这里开始不要关闭当前浏览器 window,直到设置被测试 运行。如果您在一切正常之前关闭浏览器,您可能无法再更改 nextcloud 中的设置。在这种情况下,您需要停止 nextcloud- 和 nextcloud-db-container,删除它们各自的文件夹,重新创建它们并重新开始。
点击右上角的齿轮符号,然后点击 + Apps 符号。在左侧现在可以看到带有条目 Security 的菜单栏。点击它。您现在可以看到所有安全相关的应用程序。单击 SSO 和 SAML 身份验证应用程序下方的激活按钮。
再次点击右上角的齿轮符号,然后点击管理员。单击 SSO 和 SAML 身份验证。
使用以下值:
Attribute to map UID to:username
Enable "Use SAML auth for the Nextcloud desktop clients (requires user re-authentication)"
Copy the content ofpublic.cert into the 'X.509 Certificate'-field
Copy the content ofprivate.key into the 'Private key of Service Provider'-field.
Identifier of the IdP: https://kc.domain.com/auth/realms/my-realm
URL Target of the IdP where the SP will send the Authentication Request Message: https://kc.domain.com/auth/realms/my-realm/protocol/saml
URL Location of IdP where the SP will send the SLO Request: https://kc.domain.com/auth/realms/my-realm/protocol/saml
Public X.509 certificate of the IdP: Copy the certificate from Keycloak from the Keys-tab of my-realm. You will need to add '-----BEGIN CERTIFICATE-----' in front of the key and '-----END CERTIFICATE-----' to the end of it.
In Identity Provider Data:
Attribute, displayname: username
Attribute, email adress: email
Attribute, Quota: nextcloudquota
Click Download metadata XML and save the file for the next step.
Security Settings, enable the following options:
Indicates whether the messages sent by this SP will be signed. [Metadata of the SP will offer this info]
Indicates whether the messages sent by this SP will be signed.
Indicates whether the messages sent by this SP will be signed.
Indicates a requirement for the , and elements received by this SP to be signed.
Indicates a requirement for the elements received by this SP to be signed. [Metadata of the SP will offer this info]
Check there is a Metadata valid beside the Download metadata XML-Button
Click the Download metadata XML-Button. This generate and send a XML file. Save it.
配置 Keycloak,客户端
再次访问管理控制台。单击“客户端”,然后单击右上角的“创建”按钮。
在导入旁边,单击 Select 文件按钮。 Select 您在 Nextcloud 的最后一步创建的 XML- 文件。
变化:
Client SAML Endpoint: https://kc.domain.com/auth/realms/my-realm
然后点击保存。
您将看到一个新屏幕。更改以下字段:
Name: Nextcloud
Valid Redirect URIs: https://nc.domain.com/ *
Click Save
在选项卡上很重要:
Click Delete-Button on the preassigned role list
Click Create
Name: username
Mapper Type: User Property
Property: username
SAML Attribute Name: username
SAML Attribute NameFormat: Basic
Click Save
Click Create
Name: email
Mapper Type: User Property
Property: email
SAML Attribute Name: email
SAML Attribute NameFormat: Basic
Click Save
点击创建
Name: Roles
Mapper Type: Role List
Role attribute name: Roles
Friendly Name: roles
SAML Attribute NameFormat: Basic
Single Role Attrubute: On
Click Save
点击创建
Name: nextcloudquota
Mapper Type: User Property
Property: nextcloudquota
SAML Attribute Name: nextcloudquota
SAML Attribute NameFormat: Basic
Click Save
配置Keycloak,添加用户
On the left side, click on Users
On the top-right, click Add users
Set the following values:
Username: user
Email: user@domain.com
Click Save
On the tab Credentials:
New Password: user
Password Confirmation: user
Temporary: Off
Click Reset Password
A Window pops up:
Click Change Password