Outline使用Authelia实现本地认证
在 『 基于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
1 | hmac_secret: this_is_a_secret_abc123abc123abc |
hmac_secret 是用于签署 OpenID Connect JWT 的 HMAC 密钥。为了满足所需的格式,提供的字符串被散列为 SHA256 字节字符串。您必须自己生成此选项。
官方推荐用👇下面的代码来生成
1 | LENGTH=64 |

也可以用之前老苏用过的 openssl rand -hex 32

如果命令行都不想用,就用 bitwarden 的密码生成器吧

issuer_private_key
采用 DER base64 编码的 PEM 格式的私钥,用于加密 OpenID Connect JWT
第一步、需要在 authelia 中建一个子目录 keys

第二步、停止 authelia 容器,右键 编辑 –> 存储空间 –> 添加文件夹

第三步、启动 authelia 容器,并进入终端机

执行下面👇的命令
1 | # 生成秘钥 |

如果你更喜欢命令行,也可以直接在 SSH 客户端中运行
1 | # 进入容器 |
在 File Station 中能看到生成的公钥和私钥文件

将 key.pem 重命名为 key.pem.txt 后,可以直接打开复制
复制完成后,记得把文件名改回去

所以最后应该是这个样子的
1 | issuer_private_key: | |
clients
1 | clients: |
此客户端的客户端 ID。它必须与使用此客户端的应用程序中配置的客户端 ID 完全匹配。
因为是配置给 outline 用的,所以 id 用了 outline,后面在环境变量文件中还会用到
redirect_uris
1 | redirect_uris: |
此客户端将重定向到的有效回调 URI 列表。所有其他回调将被视为不安全。URI 区分大小写,outline 的 OIDC 回调地址是 https://<URL>/auth/oidc.callback
把 <URL> 替换为域名 https://ot.laosu.ml:444/auth/oidc.callback
如果没备案,有端口也要带上
以上工作完成,记得重启容器
设置 Outline
修改 docker.env.txt
- 通用参数部分
老苏增加了几行,用于 OIDC 的设置
1 | YOUR_OIDC_CLIENT_ID=outline |
这里的 YOUR_OIDC_CLIENT_ID 对应前面设置的 configuration.yml中 clients 的 id,YOUR_OIDC_CLIENT_SECRET 对应 clients 的 secret
AUTHELIA_URL 是指 Authelia 的域名
AUTHENTICATION部分
docker.env.txt 中已经预留了 OIDC 的认证,但相关内容原来后面的空的,需要补填
1 | # To configure generic OIDC auth, you'll need some kind of identity provider. |
OIDC_DISPLAY_NAME 是显示的名称

修改 docker-compose.yml
docker-compose.yml 在 outline 的环境变量部分增加下面的内容
1 | - OIDC_CLIENT_ID=${OIDC_CLIENT_ID} |
同时注释掉了原来的 slack,不注释也可以,但是你用 OIDC 登陆成功一次后,slack 也就不再显示了

为了演示,老苏把三种认证方式都打开了
运行
在 SSH 客户端执行下面的命令
如果你是第一次安装,不需要执行
一键删除,一键删除并不会删除数据,删除outline中的子文件夹才会
1 | # 进入 outline 目录 |

在浏览器中打开 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.htmlGuide 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-129a141f6090Deploying Outline Wiki :: Guru Computing Blog
地址:https://blog.gurucomputing.com.au/doing-more-with-docker/deploying-outline-wiki/