gpt4 book ai didi

single-sign-on - 具有SAML,Keycloak和Nextcloud的SSO

转载 作者:行者123 更新时间:2023-12-04 02:39:30 32 4
gpt4 key购买 nike

我正在尝试将Keycloak设置为IdP(身份提供商)并将Nextcloud设置为服务。我想将Keycloak设置为呈现SSO(单点登录)页面。

我正在运行具有Intel兼容CPU的Linux服务器。什么是正确的配置?


Keycloak将以https://kc.domain.com的身份运行
Nextcloud将以https://nc.domain.com的身份运行

最佳答案

先决条件

要使用此答案,您需要将domain.com替换为您拥有的实际域。另外,将email@domain.com替换为您的工作电子邮件地址。

假设您已安装并正在运行docker和docker-compose。

使用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-files放在文件夹 docker中,在该文件夹中有一个项目特定的文件夹。在这里 keycloak。使用以下方法创建它们:

mkdir -p ~/docker/keycloak


在此文件夹中使用首选编辑器创建 docker-compose.yml-文件。通过以下方式启动服务:

cd ~/docker/keycloak
docker-compose up -d


请稍等片刻,让服务下载并启动。检查是否一切都在运行:

docker-compose ps


如果服务未运行。发出第二个 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.keypublic.cert,稍后我们需要nextcloud服务。

配置Nextcloud

打开浏览器,然后转到 https://nc.domain.com。按照 docker-compose.yml中的指定,用户名和密码为 admin

您需要激活默认情况下禁用的 SSO & Saml Authenticate

重要从此处开始,直到测试安装并运行之后,才关闭当前浏览器窗口。如果您在一切正常之前关闭浏览器,则可能无法再在nextcloud中更改设置。在这种情况下,您将需要停止nextcloud-和nextcloud-db-container,删除它们各自的文件夹,重新创建它们,然后重新开始。

单击右上角的齿轮符号,然后单击 + Apps符号。现在在左侧看到带有条目 Security的菜单栏。点击它。现在,您将看到所有已实现安全性的应用。单击 Activate应用程序下方的 SSO & SAML authentication按钮。

再次单击右上角的齿轮符号,然后单击 Admin。点击 SSO & SAML authentication

使用以下值:


将UID映射到:用户名的属性
启用“对Nextcloud桌面客户端使用SAML身份验证(需要用户重新身份验证)”
public.cert的内容复制到“ X.509证书”字段中
private.key的内容复制到“服务提供商的私钥”字段中。
IdP的标识符: https://kc.domain.com/auth/realms/my-realm
SP将在其中发送身份验证请求消息的IdP的URL目标: https://kc.domain.com/auth/realms/my-realm/protocol/saml
SP将向其发送SLO请求的IdP的URL位置: https://kc.domain.com/auth/realms/my-realm/protocol/saml
IdP的公共X.509证书:从 Keysmy-realm选项卡中的Keycloak复制证书。您将需要在密钥前面添加“ ----- BEGIN CERTIFICATE -----”,并在其末尾添加“ ----- END CERTIFICATE -----”。
在服务提供商数据中:


属性,显示名称:用户名
属性,电子邮件地址:电子邮件
单击 Download metadata XML并保存文件以进行下一步。

在“安全设置”中,启用以下选项:


指示是否将对此SP发送的消息进行签名。 [SP的元数据将提供此信息]
指示是否将对此SP发送的消息进行签名。
指示是否将对此SP发送的消息进行签名。
指示对此SP接收到的和元素进行签名的要求。
指示对此SP接收的元素进行签名的要求。 [SP的元数据将提供此信息]

检查 Metadata valid-按钮旁边是否有 Download metadata XML
This part of the configuration should look like this
单击 Download metadata XML-按钮。这将生成并发送XML文件。保存。


配置Keycloak,客户端

再次访问管理员控制台。单击 Clients,然后在右上角单击 Create-按钮。

在导入旁边,单击 Select File-按钮。选择您在Nextcloud的最后一步中创建的XML文件。

更改:


客户端SAML端点: https://kc.domain.com/auth/realms/my-realm


然后单击 Save

出现一个新屏幕。更改以下字段:


名称:Nextcloud
有效的重定向URI: https://nc.domain.com/ *
点击 Save


在选项卡 Matters上:


单击预先分配的 Delete上的 role list-按钮
点击 Create


名称:用户名
映射器类型:用户属性
属性:用户名
SAML属性名称:用户名
SAML属性名称格式:基本
点击 Save

点击 Create


名称:电子邮件
映射器类型:用户属性
财产:电子邮件
SAML属性名称:电子邮件
SAML属性名称格式:基本
点击 Save

点击 Create


名称:角色
映射器类型:角色列表
角色属性名称:角色
友好名称:角色
SAML属性名称格式:基本
单一角色归属:开启
点击 Save



配置Keycloak,添加用户


在左侧,单击 Users
点击右上角的 Add users
设置以下值:


用户名:user
电子邮件:user@domain.com
点击 Save

在选项卡 Credentials上:


新密码:用户
密码确认:用户
临时:关闭
点击 Reset Password

弹出一个窗口:


点击 Change Password



测试运行

以隐身/私人模式打开新的浏览器窗口。例如。对于google-chrome按 Ctrl-Shift-N,在Firefox中按 Ctrl-Shift-P。保持另一个浏览器窗口打开nextcloud设置页面。否则,您可能会被锁定。

使用隐身/私人浏览器窗口访问 https://nc.domain.com。将显示给您密钥库用户名/密码页面。输入 user作为名称和密码。应该用nextcloud欢迎屏幕打招呼。

致谢


如果没有精彩的 http://int128.hatenablog.com/entry/2018/01/16/194048博客条目,本指南将是不可能的。我已经用 google-translator用英语阅读过。
还要感谢 RMM。他的 wiki entry允许我为nextcloud创建正确的密钥并启用消息签名,从而改善了答案。

关于single-sign-on - 具有SAML,Keycloak和Nextcloud的SSO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400812/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com