Outline使用Authelia实现本地认证
在 『 基于Outline构建团队的知识库(上篇) 』 一文中老苏介绍过 Outline
需要借助于第三方认证,同时老苏也关注到 Authelia
支持 OIDC
认证,虽然 Authelia
官方强调还是 β版
,但老苏还是觉得应该试试,毕竟如果成功了就可以让 Outline
实现真正意义上的本地化部署了
【重要提示】:
老苏只是记录安装方法和过程,不对你的数据负任何责任😳
如果你是第一次安装,请先看看
Outline
和Authelia
的安装,会有助于理解本文,因为有👇这些铺垫,所以只对新增的内容做了简要的描述- 基于Outline构建团队的知识库 (上篇)
- 基于Outline构建团队的知识库 (下篇)
- 单点登录服务Authelia(上篇)
- 单点登录服务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/