Synology SSO oidc 对接 keycloak (DSM 7.2)

在DSM 7.2中由于安全性限制synology只允许使用https的sso server,该教程提供部署https的keycloak并使用OIDC方式链接到NAS。

参考文档

https://www.keycloak.org/server/configuration

环境

DS3622xs+
DSM 7.2.2 up3

keycloak版本:
26.2.1

域使用的是Synology的LDAP

NAS和keycloak加入同一个Synology LDAP

官方容器下载地址:
https://hub.docker.com/r/keycloak/keycloak

本教程使用的是VMware keycloak:
https://hub.docker.com/r/bitnami/keycloak

准备证书

这边测试使用synology.me域名解析及证书。

将域名解析到NAS的内网IP:

并申请对应synology.me域名证书:

将synology.me域名证书导出:

导出的证书文件中只需要以下三个文件:

为了简便部署,只需要将中间证书的内容添加到证书内容后就可以正常工作:

在docker下新建cert子文件夹

并将合并后的证书与秘钥添加到该文件夹中:

配置容器

先下载keycloak镜像,点击运行:

端口设置中需要将keycloak的8080端口与8443映射到NAS(这边分别映射到38080与38443)
存储空间需要将证书所在文件夹映射到容器内(这边是将/docker/cert映射到容器内的/cert)

在环境中需要配置以下变量。

管理员用户名:
KC_BOOTSTRAP_ADMIN_USERNAME

管理员密码:
KC_BOOTSTRAP_ADMIN_PASSWORD

数据库提供商:
KEYCLOAK_DATABASE_VENDOR
dev-file

启用http:
KC_HTTP_ENABLED
true

配置证书路径:
KC_HTTPS_CERTIFICATE_FILE
/cert/cert.pem

KC_HTTPS_CERTIFICATE_KEY_FILE
/cert/privkey.pem

配置完成后如下:

查看HTTP是否可以正常访问:

HTTPS是否可以正常访问并且证书为安全:

配置keycloak

加入Synology LDAP

在User federation选择加入LDAP

Vendor为Active Directory
Connection为安装LDAP server的NAS IP

Bind type为simple
Bind DN为LDAP server的Bind DN
Bind credentials为LDAP server的密码

配置如下:

Edit mode为READ_ONLY
Users DN为LDAP server的Bind DN去除uid=root
Username LDAP attribute与RDN LDAP attribute保持cn
UUID LDAP attribute为uidNumber
User object classes为organizationalPerson
Pagination为off

查看用户中,域用户是否有正常同步到keycloak

配置OIDC

在Clients中新建client:

选择client类型为openID connect (OIDC)
配置自定义Client ID

启用客户端验证:

Root URL配置为NAS的https访问地址
Valid redirect URIs配置为NAS的https访问地址加上/*

NAS配置OIDC服务

在控制面板->域/LDAP->SSO 客户端->启用OpenID Connect 并在设置中选择OIDC:

获取well-known URL:
在keycloak的realm settings中打开openID endpoint configuration:

查看是否可以正常打开:

获取应用程序ID:
打开对应OIDC client查看client ID

获取应用程序秘钥:
打开对应OIDC client在credentials中查看Client Secret

重定向URL为NAS的https访问地址
授权范围为openid profile
用户声名为name

测试登录