版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
简介
随着环境中搭建的应用越来越多(seafile 云盘、seatable 在线表格、immich 图片管理、confluence 知识库、outline 在线文档等),每个应用都配置对应的用户名和密码,应用多了使用和记录以及日常的管理都非常麻烦,有没有一种应用能够将这些账号整合起来统一管理呢?这就是需要实现的单点登录。
目标:
- 配置并启用 keycloak
- 在 keycloak 中配置应用和对应的账号
- 配置 seafile 云盘应用使用 keycloak 的账号实现 sso 单点登录
Seafile 的功能和安装无需过多介绍,详细的内容可以参考以下文档:
- docker-seafile-11.06 ARM
- docker-seafile-12.0.11
- docker-seafile pro -11.0.14
- docker-seafile-12.0.6
- docker-自定义 seafile
seatable 用来提供在线表格应用,详细的配置过程可以参考以下内容:
Keycloak 提供针对现代应用程序和服务的开源身份和访问管理解决方案,支持单点登录 SSO,服务可通过 OpenID Connect、OAuth 2.0 等协议对接 Keycloak。有关 Keycloak 内容可以参考以下文档:
- docker-部署安装 keycloak
- Keycloak 使用群晖 Synology Directory Server 作为 AD/LDAP 用户数据源
- Outline 整合 KeyCloa k的 OIDC 登录
身份认证与授权简述
名词 | 英文 | 说明 |
---|---|---|
身份识别 | Identification | 让系统知道你是谁 |
身份验证 | Authentication | 让系统相信你是谁 |
授权 | Authorization | 允许他人存取某项资源 |
访问控制 | Access Control | 检验是否有资格存取某项资源 |
- 身份识别 (Identification) 要让系统知道你是谁,就必须告诉他。在我们一开使「输入账号」的时候,其实就是在做这件事情。
- 身份验证。这个部分也就是主要确定「你」是谁的活动。为了达成这个目的,需要知道除了系统外,只有你才知道的信息(或只有你才拥有的)。 最常见的辨识方式就是「密码」,此外,近来的生物识别,包含指纹辨识、Face Id、虹膜辨识等,都是在验证身份。
- 授权控制,Authorization,和身份验证的英文很像。指的是将某个权限(permission)授予给某人(或某只程序)的活动。 特别注意的是,授予对象不只限于「自然人」,还包含机器人或应用程序。是建立的 Client。
- 访问控制。Web App 在做存取资源的部分。
简单来说,这整个过程: 在决定了 某人(谁) 对于 某项资源 是否有 某种操做的权限。
在一个环形通道的一次有一扇上锁的门。我必须证明我有那门的钥匙,我只需要从一边进入,并且从另一边出来就可以。
只要能够从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】
keycloak 配置
1、使用管理员 admin 登录 keycloak ,在 keycloak 中创建单独的领域 seafile ,后续的操作都基于 seafile 领域不会影响和干扰其它的应用。
2、在 seafile 领域下创建 seafile 的客户端,参照环境和下图完成 seafile 客户端配置
- 【General Settings】-【Client ID】处填写 seafile ,【name】 和 【Description】 不是必填项,按需填写即可
- 【Capability config】确保启用 【Client authentication】并勾选 【Authentication flow】中的 Standard flow
- 进入【Access settings】后
- 【Root URL】:http://192.168.182.53:8003
- 【Home URL】:/accounts/login
- 【Valid redirect URIs】:http://192.168.182.53:8003/*
/oauth/callback/ - 【Web origins】:http://192.168.182.53:8003
- 【Admin URL】:http://192.168.182.53:8003
3、完成后可以参照下图查看设置状态
4、查看【clients】-【Credentials】
信息 |
---|
这个是 keycloak 生成的验证密码,用于绑定 seafile 配置文件中的 OAUTH_CLIENT_SECRE 项 |
5、在 keycloak 中创建用户
Seafile 配置
在启用单点登录前请先确保 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 配置
seatable 的配置和 seafile 类似,将 seatable 整合进来是想实现注册用户仅新建一次。也就是要实现直接用 seafile 配置中新建的 keycloak 用户也能在 seatable 中登录。
信息 |
---|
这里直接使用 seafile 的领域,只是在 seafile 领域下新建 client |
调整 seafile 领域的会话设置
新建领域后默认的会话设置存在一个问题:当前用户退出应用后点击【单点登录】按钮不会弹出 keycloak 的登录认证界面,会直接进入对应的应用界面。为确保安全,可以通过修改领域用户的会话周期提升安全。
Image Added
新建 seatable 的 client
在 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 单点配置
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 ########### |
Image Added
目录 |
---|