在 『 基于Outline构建团队的知识库(上篇) 』 一文中老苏介绍过 Outline
需要借助于第三方认证,同时老苏也关注到 Authelia
支持 OIDC
认证,虽然 Authelia
官方强调还是 β版
,但老苏还是觉得应该试试,毕竟如果成功了就可以让 Outline
实现真正意义上的本地化部署了
【重要提示】:
老苏只是记录安装方法和过程,不对你的数据负任何责任😳
-
如果你是第一次安装,请先看看
Outline
和Authelia
的安装,会有助于理解本文,因为有👇这些铺垫,所以只对新增的内容做了简要的描述 -
authelia
不支持在非标准端口上运行,表现为存在截掉端口的现象,按作者的说法,可能要等到v4.34
才会修复,所以很多步骤需要自己手动添加端口,如果你是备案了的域名,就不存在这样的烦恼 -
登录成功再
logout
之后,只会显示上次登录成功的方式,所以如果你之前实践过slack
登录,就算你按照本文操作成功,登录界面也是看不到的,老苏解决的办法简单粗暴,直接删空data
目录,如果你已经有笔记数据了请慎重!慎重!慎重!一定要三思而后行
什么是 OpenID Connect(OIDC)?
OpenID Connect 1.0
是OAuth 2.0
协议之上的简单身份层。它允许客户端根据授权服务器执行的身份验证验证最终用户的身份,并以可互操作和类似REST
的方式获取有关最终用户的基本配置文件信息。
OpenID Connect
允许所有类型的客户端(包括基于 Web
、移动和 JavaScript
的客户端)请求和接收有关经过身份验证的会话和最终用户的信息。该规范套件是可扩展的,允许参与者在对他们有意义的情况下使用可选功能,例如身份数据加密、OpenID
提供者发现和会话管理。
老苏的把本文用到的文件都放在了这里👉: https://github.com/wbsu2003/synology/tree/main/outline(OIDC)
设置 Authelia
Authelia
官方在 https://www.authelia.com/docs/configuration/identity-providers/oidc.html 为 OIDC
身份提供者提供了一个示例配置,同时也详细解释了每个字段
在原来的 Authelia
的配置文件 configuration.yml
尾部增加了 identity_providers
,这里只对需要修改处做简单的说明
hmac_secret
hmac_secret: this_is_a_secret_abc123abc123abc
hmac_secret
是用于签署 OpenID Connect JWT
的 HMAC
密钥。为了满足所需的格式,提供的字符串被散列为 SHA256
字节字符串。您必须自己生成此选项。
官方推荐用👇下面的代码来生成
LENGTH=64
tr -cd '[:alnum:]' < /dev/urandom | fold -w "${LENGTH}" | head -n 1 | tr -d '\n' ; echo
也可以用之前老苏用过的 openssl rand -hex 32
如果命令行都不想用,就用 bitwarden
的密码生成器吧
issuer_private_key
采用 DER base64
编码的 PEM
格式的私钥,用于加密 OpenID Connect JWT
第一步、需要在 authelia
中建一个子目录 keys
第二步、停止 authelia
容器,右键 编辑
--> 存储空间
--> 添加文件夹
第三步、启动 authelia
容器,并进入终端机
执行下面👇的命令
# 生成秘钥
authelia rsa generate --dir /keys
如果你更喜欢命令行,也可以直接在 SSH
客户端中运行
# 进入容器
docker exec --user root -it <容器名称> /bin/sh
# 生成秘钥
authelia rsa generate --dir /keys
在 File Station
中能看到生成的公钥和私钥文件
将 key.pem
重命名为 key.pem.txt
后,可以直接打开复制
复制完成后,记得把文件名改回去
所以最后应该是这个样子的
issuer_private_key: |
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKC...
-----END RSA PRIVATE KEY-----
clients
clients:
- id: outline
description: Outline Wiki
secret: 856d53b8eb53c6d4e30194a2
此客户端的客户端 ID
。它必须与使用此客户端的应用程序中配置的客户端 ID
完全匹配。
因为是配置给 outline
用的,所以 id
用了 outline
,后面在环境变量文件中还会用到
redirect_uris
redirect_uris:
- https://ot.laosu.ml:444/auth/oidc.callback
此客户端将重定向到的有效回调 URI
列表。所有其他回调将被视为不安全。URI
区分大小写,outline
的 OIDC
回调地址是 https://<URL>/auth/oidc.callback
把 <URL>
替换为域名 https://ot.laosu.ml:444/auth/oidc.callback
如果没备案,有端口也要带上
以上工作完成,记得重启容器
设置 Outline
修改 docker.env.txt
- 通用参数部分
老苏增加了几行,用于 OIDC
的设置
YOUR_OIDC_CLIENT_ID=outline
YOUR_OIDC_CLIENT_SECRET=856d53b8eb53c6d4e30194a2
AUTHELIA_URL=https://auth.laosu.ml:444
这里的 YOUR_OIDC_CLIENT_ID
对应前面设置的 configuration.yml
中 clients
的 id
,YOUR_OIDC_CLIENT_SECRET
对应 clients
的 secret
AUTHELIA_URL
是指 Authelia
的域名
AUTHENTICATION
部分
docker.env.txt
中已经预留了 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=${YOUR_OIDC_CLIENT_ID}
OIDC_CLIENT_SECRET=${YOUR_OIDC_CLIENT_SECRET}
OIDC_AUTH_URI=${AUTHELIA_URL}/api/oidc/authorize
OIDC_TOKEN_URI=${AUTHELIA_URL}/api/oidc/token
OIDC_USERINFO_URI=${AUTHELIA_URL}/api/oidc/userinfo
# Specify which claims to derive user information from
# Supports any valid JSON path with the JWT payload
OIDC_USERNAME_CLAIM=preferred_username
# Display name for OIDC authentication
OIDC_DISPLAY_NAME=Authelia
# Space separated auth scopes.
OIDC_SCOPES="openid profile email"
OIDC_DISPLAY_NAME
是显示的名称
修改 docker-compose.yml
docker-compose.yml
在 outline
的环境变量部分增加下面的内容
- OIDC_CLIENT_ID=${OIDC_CLIENT_ID}
- OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}
- OIDC_AUTH_URI=${OIDC_AUTH_URI}
- OIDC_TOKEN_URI=${OIDC_TOKEN_URI}
- OIDC_USERINFO_URI=${OIDC_USERINFO_URI}
- OIDC_USERNAME_CLAIM=${OIDC_USERNAME_CLAIM}
- OIDC_DISPLAY_NAME=${OIDC_DISPLAY_NAME}
- OIDC_SCOPES=${OIDC_SCOPES}
同时注释掉了原来的 slack
,不注释也可以,但是你用 OIDC
登陆成功一次后,slack
也就不再显示了
为了演示,老苏把三种认证方式都打开了
运行
在 SSH
客户端执行下面的命令
如果你是第一次安装,不需要执行
一键删除
,一键删除
并不会删除数据,删除outline
中的子文件夹才会
# 进入 outline 目录
cd /volume2/docker/outline
# 一键删除
docker-compose --env-file docker.env.txt down
# 一键运行
docker-compose --env-file docker.env.txt up -d
在浏览器中打开 https://ot.laosu.ml:444
选择 使用 Authelia 继续
,浏览器中地址会变成 https://auth.laosu.ml/
,并显示 无法访问此网站
如果你是没备案的域名,需手动添加端口,老苏的是 444
,加好后直接回车
因为前面设置了 two_factor
,还需要输入 OTP
密码,如果是是 one_factor
就直接跳到下个界面了
认证完成后地址栏会变成 https://auth.laosu.ml/consent
,需再次动添加端口 444
,然后回车
点蓝色的 ACCEPT
按钮后,会再次显示 无法访问此网站
,需第三次添加端口,然后回车,就能看到主界面了
只要你不 退出登录
,下次打开是可以直接进入到主界面的,但只要你退出了,其他的登录方式就消失了
参考文档
OpenID Connect | OpenID
地址:https://openid.net/connect/
OpenID Connect - Authelia
地址:https://www.authelia.com/docs/configuration/identity-providers/oidc.html
Guide for installing Outline with Authelia as an OpenID provider | by Rigaut-Luczak Lola | Medium
地址:https://medium.com/@Lola_Dam/guide-for-installing-outline-with-authelia-as-an-openid-provider-129a141f6090
Deploying Outline Wiki :: Guru Computing Blog
地址:https://blog.gurucomputing.com.au/doing-more-with-docker/deploying-outline-wiki/