版本比较
标识
- 该行被添加。
- 该行被删除。
- 格式已经改变。
简介
随着环境中搭建的应用越来越多(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
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 |
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】
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、最终完成后可以参照下图查看设置状态
3、完成后可以参照下图查看设置状态
Image Added
4、查看【clients】-【Credentials】
信息 |
---|
这个是 keycloak 生成的验证密码,用于绑定 seafile 配置文件中的 OAUTH_CLIENT_SECRE 项 |
Image Added
Image Added
5、在 keycloak 中创建用户
Image Added
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 的各项功能
Image Added
Image Added
Image Added
Image Added
Image Removed
目录 |
---|