Outline整合KeyCloak的OIDC登录

前面几篇文章讲到了《Docker Compose安装Keycloak》、《Keycloak使用群晖Synology Directory Server作为AD/LDAP用户数据源》,我们已经实现了KeyCloak的安装和与群晖NAS的整合,那么接下来我们需要用这个AD的用户数据源为一系列服务提供账号登陆支持。Gitlab已经讲过了,那么接下来可以试一下Outline。

Outline是一个比较新的,类似Notion的在线记事本,我前面也讲了如何快速部署Outline。但之前是用了Azure Active Directory,在手机的EDGE浏览器登录的时候,非要拉起微软自己的APP,华为手机还不支持。所以我们现在要干掉Azure Active Directory,改为自己的群晖AD用户。

1、KeyCloak中创建新的Realm

首先,我建议是单独创建一个realm,不要使用KeyCloak默认的master,好处是可以做到用户数据和应用的隔离,保证KeyCloak的安全性。

登录KeyCloak的后台,左上角有个下拉,默认是master,点击下拉菜单,然后点击『Create Realm』

realm name自己起一个,要用英文小写(因为大小写区分,用大写容易出错)。

比如写一个app吧。然后点击Create。

创建完以后,URL就会类似于https://<域名>/realms/<realm name>/protocol/openid-connect/auth

2、KeyCloak中配置User Federation,使用Synology Directory Server

因为每个realm都是单独隔离的,新创建的realm不能复用master的用户数据,所以用户的数据源需要重新配置。参考Keycloak使用群晖Synology Directory Server作为AD/LDAP用户数据源 这篇文章的第五节。这里就不再赘述了。

3、KeyCloak中创建新的Client

左侧菜单点击『Clients』,然后右侧点击『Create Client』

Client type选择OpenID Connect,Client ID输入小写的outline(和前面realm name一样,因为要用于验证,所以小写,避免搞错),Name可以输入大写的Outline,点击Next。

Client authentication选上,Direct access grants去掉,点击Save

参考下面的图片填写三个框,填完后点击Save保存

点击Credentials,然后点击Client secret右侧的拷贝小按钮,把秘钥拷贝出来备用

4、修改Outline的配置,添加KeyCloak作为OIDC

如果你是按照我的文章《本地快速部署Outline》来安装Outline的,那么修改docker.env文件,找到OIDC这段,修改成下面的样子

# To configure generic OIDC auth, you'll need some kind of identity provider.
# See documentation for whichever IdP you use to acquire the following info:
# Redirect URI is https://<URL>/auth/oidc.callback
OIDC_CLIENT_ID=outline
OIDC_CLIENT_SECRET=<前面拷贝出来的Client secret>
OIDC_AUTH_URI=https://<KeyCloak域名>/realms/<realm名字>/protocol/openid-connect/auth
OIDC_TOKEN_URI=https://<KeyCloak域名>/realms/<realm名字>/protocol/openid-connect/token
OIDC_USERINFO_URI=https://<KeyCloak域名>/realms/<realm名字>/protocol/openid-connect/userinfo

# Specify which claims to derive user information from
# Supports any valid JSON path with the JWT payload
OIDC_USERNAME_CLAIM=email

# Display name for OIDC authentication
OIDC_DISPLAY_NAME=<用来给Outline显示登录的文案,比如『Bra SSO Server』>

# Space separated auth scopes.
OIDC_SCOPES=email openid profile

保存,然后重启docker,搞定

docker-compose down
docker-compose up -d