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