暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Outline使用Authelia实现本地认证

各种折腾 2022-03-11
3874

在 『 基于Outline构建团队的知识库(上篇) 』 一文中老苏介绍过 Outline
需要借助于第三方认证,同时老苏也关注到 Authelia
支持 OIDC
认证,虽然 Authelia
官方强调还是 β版
,但老苏还是觉得应该试试,毕竟如果成功了就可以让 Outline
实现真正意义上的本地化部署了

【重要提示】:

老苏只是记录安装方法和过程,不对你的数据负任何责任😳

  1. 如果你是第一次安装,请先看看 Outline
    Authelia
    的安装,会有助于理解本文,因为有👇这些铺垫,所以只对新增的内容做了简要的描述

  2. authelia
    不支持在非标准端口上运行,表现为存在截掉端口的现象,按作者的说法,可能要等到 v4.34
    才会修复,所以很多步骤需要自己手动添加端口,如果你是备案了的域名,就不存在这样的烦恼

  3. 登录成功再 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

  1. 通用参数部分

老苏增加了几行,用于 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
的域名

  1. 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/

@所有人:写文不易,如果你都看到了这里,请点个
在看
,分享给更多的朋友;为确保你能收到每一篇文章,请主页右上角设置星标。

文章转载自各种折腾,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论