版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

简介

随着环境中搭建的应用越来越多(seafile 云盘、seatable 在线表格、immich 图片管理、confluence 知识库、outline 在线文档等),每个应用都配置对应的用户名和密码,应用多了使用和记录以及日常的管理都非常麻烦,有没有一种应用能够将这些账号整合起来统一管理呢?这就是需要实现的单点登录。

目标

  1. 配置并启用 keycloak
  2. 在 keycloak 中配置应用和对应的账号
  3. 配置 seafile 云盘应用使用 keycloak 的账号实现 sso 单点登录

Seafile 的功能和安装无需过多介绍,详细的内容可以参考以下文档:

Keycloak 提供针对现代应用程序和服务的开源身份和访问管理解决方案,支持单点登录 SSO,服务可通过 OpenID Connect、OAuth 2.0 等协议对接 Keycloak。有关 Keycloak 内容可以参考以下文档:

身份认证与授权简述

名词英文说明
身份识别 Identification    让系统知道你是谁
身份验证   Authentication    让系统相信你是谁
授权Authorization    允许他人存取某项资源
访问控制 Access Control    检验是否有资格存取某项资源
  • 身份识别 (Identification) 要让系统知道你是谁,就必须告诉他。在我们一开使「输入账号」的时候,其实就是在做这件事情。
  • 身份验证。这个部分也就是主要确定「你」是谁的活动。为了达成这个目的,需要知道除了系统外,只有你才知道的信息(或只有你才拥有的)。 最常见的辨识方式就是「密码」,此外,近来的生物识别,包含指纹辨识、Face Id、虹膜辨识等,都是在验证身份。
  • 授权控制,Authorization,和身份验证的英文很像。指的是将某个权限(permission)授予给某人(或某只程序)的活动。 特别注意的是,授予对象不只限于「自然人」,还包含机器人或应用程序。是建立的 Client。
  • 访问控制。Web App 在做存取资源的部分。

简单来说,这整个过程: 在决定了 某人(谁) 对于 某项资源 是否有 某种操做的权限。

在一个环形通道的一次有一扇上锁的门。我必须证明我有那门的钥匙,我只需要从一边进入,并且从另一边出来就可以。

只要能够从A进入,B出来就说明我有门钥匙

 环境说明

项目内容
seafilehttp://192.168.182.53:8003
keycloakhttp://192.168.182.52:8080
seafilekeycloak 的 realms 和 client
测试用户113600006772@139.com
测试用户213600006773@139.com

参照简介的内容完成 seafile 和 keycloak 的配置,也可以直接下载配置文件运行【keycloak 配置文件 env.keycloakkeycloak.yml】【Seafile 配置文件 seafile_12.0.ymlenv.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】后

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 相关的配置

代码块
languagepython
##### 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 AddedImage Added

Image AddedImage AddedImage Removed


目录