随着环境中搭建的应用越来越多(seafile 云盘、seatable 在线表格、immich 图片管理、confluence 知识库、outline 在线文档等),每个应用都配置对应的用户名和密码,应用多了使用和记录以及日常的管理都非常麻烦,有没有一种应用能够将这些账号整合起来统一管理呢?这就是需要实现的单点登录。
目标:
Seafile 的功能和安装无需过多介绍,详细的内容可以参考以下文档:
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 |
seafile | keycloak 的 realms 和 client |
测试用户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 的各项功能