随着环境中搭建的应用越来越多(seafile 云盘、seatable 在线表格、immich 图片管理、confluence 知识库、outline 在线文档等),每个应用都配置对应的用户名和密码,应用多了使用和记录以及日常的管理都非常麻烦,有没有一种应用能够将这些账号整合起来统一管理呢?这就是需要实现的单点登录。
目标:
Seafile 的功能和安装无需过多介绍,详细的内容可以参考以下文档:
seatable 用来提供在线表格应用,详细的配置过程可以参考以下内容:
Keycloak 提供针对现代应用程序和服务的开源身份和访问管理解决方案,支持单点登录 SSO,服务可通过 OpenID Connect、OAuth 2.0 等协议对接 Keycloak。有关 Keycloak 内容可以参考以下文档:
名词 | 英文 | 说明 |
---|---|---|
身份识别 | Identification | 让系统知道你是谁 |
身份验证 | Authentication | 让系统相信你是谁 |
授权 | Authorization | 允许他人存取某项资源 |
访问控制 | Access Control | 检验是否有资格存取某项资源 |
简单来说,这整个过程: 在决定了 某人(谁) 对于 某项资源 是否有 某种操做的权限。
在一个环形通道的一次有一扇上锁的门。我必须证明我有那门的钥匙,我只需要从一边进入,并且从另一边出来就可以。
只要能够从A进入,B出来就说明我有门钥匙
项目 | 内容 |
---|---|
seafile | http://192.168.182.53:8003 |
keycloak | http://192.168.182.52:8080 |
seatable | http://192.168.11.185:8003 |
seafile | keycloak 的 realms 和 client |
seatable | Keycload 的 client ,共用 seafile 的 realms |
测试用户1 | 13600006772@139.com |
测试用户2 | 13600006773@139.com |
参照简介的内容完成 seafile 和 keycloak 的配置,也可以直接下载配置文件运行【keycloak 配置文件 env.keycloak和keycloak.yml】【Seafile 配置文件 seafile_12.0.yml和env.seafile】
1、使用管理员 admin 登录 keycloak ,在 keycloak 中创建单独的领域 seafile ,后续的操作都基于 seafile 领域不会影响和干扰其它的应用。
2、在 seafile 领域下创建 seafile 的客户端,参照环境和下图完成 seafile 客户端配置
3、完成后可以参照下图查看设置状态
4、查看【clients】-【Credentials】
这个是 keycloak 生成的验证密码,用于绑定 seafile 配置文件中的 OAUTH_CLIENT_SECRE 项 |
5、在 keycloak 中创建用户
在启用单点登录前请先确保 seafile 能正常使用,启用 sso 单点登录可以参考官网说明,具体的操作方式是在 seahub_settings.py 文件中增加 keycloak 相关的配置
##### config of keycloak ############ ENABLE_OAUTH = True OAUTH_CREATE_UNKNOWN_USER = True OAUTH_ENABLE_INSECURE_TRANSPORT = True OAUTH_ACTIVATE_USER_AFTER_CREATION = True OAUTH_CLIENT_ID = "seafile" OAUTH_CLIENT_SECRET = "vw4S3xvmeFmb0biGmEPClCFlLoYFQ5Hw" OAUTH_REDIRECT_URL = "http://192.168.182.53:8003/oauth/callback/" OAUTH_PROVIDER_DOMAIN = '192.168.182.53:8003' OAUTH_AUTHORIZATION_URL = 'http://192.168.182.52:8080/realms/seafile/protocol/openid-connect/auth' OAUTH_TOKEN_URL = 'http://192.168.182.52:8080/realms/seafile/protocol/openid-connect/token' OAUTH_USER_INFO_URL = 'http://192.168.182.52:8080/realms/seafile/protocol/openid-connect/userinfo' OAUTH_SCOPE = ["openid", "profile", "email"] OAUTH_ATTRIBUTE_MAP = { "sub": (True, "uid"), "email": (False, "contact_email"), "name": (False, "name") } ##### keycloak config edn ########### |
按上面的内容完成调整后重启 seafile 即可生效。
1、按正常方式登录 seafile ,点击登录界面的【单点登录】按钮进入单点登录
2、点击单点登录后会自动跳转到 keycloak 的登录界面
3、在 keycloak 的登录界面输入在 keycloak 中新增的用户名和密码完成登录
4、登录后就能直接使用 seafile 的各项功能
seatable 的配置和 seafile 类似,将 seatable 整合进来是想实现注册用户仅新建一次。也就是要实现直接用 seafile 配置中新建的 keycloak 用户也能在 seatable 中登录。
这里直接使用 seafile 的领域,只是在 seafile 领域下新建 client |
新建领域后默认的会话设置存在一个问题:当前用户退出应用后点击【单点登录】按钮不会弹出 keycloak 的登录认证界面,会直接进入对应的应用界面。为确保安全,可以通过修改领域用户的会话周期提升安全。
在 seafile 领域下创建 seatable 的客户端,参照环境和下图完成 seatable 客户端配置
【General Settings】-【Client ID】处填写 seafile ,【name】 和 【Description】 不是必填项,按需填写即可
【Capability config】确保启用 【Client authentication】并勾选 【Authentication flow】中的 Standard flow
进入【Access settings】后
【Root URL】:http://192.168.11.185:8003
【Home URL】:/accounts/login
【Valid redirect URIs】:http://192.168.182.53:8003/*
/oauth/callback/
【Web origins】:http://192.168.11.185:8003
【Admin URL】:http://192.168.11.185:8003
seatable 启用单点配置和 seafile 内容存在差异,在启用单点登录前请先确保 seatable 能正常使用,启用 sso 单点登录可以参考官网说明,具体的操作方式是在 dtable_web_settings.py 文件中增加 keycloak 相关的配置
##### config of keycloak ############ ENABLE_OAUTH = True OAUTH_CREATE_UNKNOWN_USER = True OAUTH_ENABLE_INSECURE_TRANSPORT = True OAUTH_ACTIVATE_USER_AFTER_CREATION = True OAUTH_CLIENT_ID = "seatable" OAUTH_CLIENT_SECRET = "TXKuFxc1ZK1eWwHMIY9K9rZ1K8e4npmN" OAUTH_REDIRECT_URL = "http://192.168.11.185:8003/oauth/callback/" OAUTH_PROVIDER_DOMAIN = '192.168.11.185:8003' OAUTH_AUTHORIZATION_URL = 'http://192.168.182.52:8080/realms/seafile/protocol/openid-connect/auth' OAUTH_TOKEN_URL = 'http://192.168.182.52:8080/realms/seafile/protocol/openid-connect/token' OAUTH_USER_INFO_URL = 'http://192.168.182.52:8080/realms/seafile/protocol/openid-connect/userinfo' OAUTH_SCOPE = ["openid", "profile", "email"] OAUTH_ATTRIBUTE_MAP = { "sub": "uid", "email": "contact_email", "name": "name" } ##### keycloak config edn ########### |