Outline 是一个功能完善、UI 简洁实用的 Wiki 程序,其线上托管版本需要付费,但提供免费、可以自行部署的 开源版本。Outline 不支持账号密码登录,而是需要通过 OIDC、SSO、SAML 等方式集成第三方的身份验证服务。本文介绍如何让自部署的 Outline 支持通过 GitHub 账号登录。
前提条件
- 已完成 Outline 部署,且可以在本机正常访问
登录到 Outline
页面(如图) - 记下 Outline 的根页面 URL(一般与 Outline 登录页面的 URL 一致,形如
https://docs.yourcompany.com/
)
步骤一:在 GitHub 中创建 OAuth Application
- 访问 GitHub 并登录
- 进入 OAuth Apps 页面(也可以依次点击:右上角头像 - Settings - Developer Settings - OAuth Apps)
- 点击
New OAuth App
填写
Register a new OAuth application
表单- Application name: 可自行填写,例如
outline
- Homepage URL: 填写 Outline 的根路径 URL
- Authorization callback URL: 填写
<Homepage URL>/auth/oidc.callback
,其中<Homepage URL>
需要替换为Outline 的根页面 URL
- Application name: 可自行填写,例如
- 点击
Register application
按钮
步骤二:获取 Client ID 和 Client secrets
- 进入 OAuth Apps 页面(也可以依次点击:右上角头像 - Settings - Developer Settings - OAuth Apps)
- 选择步骤一创建的应用
- 点击
Generate a new client secret
按钮 - 记下 Client ID 和 Client secret(注意 Client secret 仅在创建时显示一次,后续不可再查询;如不慎遗失,可以再次点击按钮重新创建一个)
步骤三:配置 Outline 环境变量
注意:在以下环境变量示例中,URL
, OIDC_CLIENT_ID
以及 OIDC_CLIENT_SECRET
需要根据实际情况填写(上文已经提示您需要记下并在这里填写的信息),其他环境变量为固定值,可以直接套用。
# 填写首页 URL(同时影响 OAuth 授权完成后跳转返回的 URL)
URL=<Homepage URL>
# 填写 GitHub OAuth application 的 Client ID 和 Client secret
OIDC_CLIENT_ID=<your-client-id>
OIDC_CLIENT_SECRET=<your-client-secret>
# 填写 GitHub 的 OAuth endpoint,参考 https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#web-application-flow
OIDC_AUTH_URI=https://github.com/login/oauth/authorize
OIDC_TOKEN_URI=https://github.com/login/oauth/access_token
# OAuth 授权的权限范围
OIDC_SCOPES=read:user user:email
# 通过 GitHub API 获取用户基本信息
OIDC_USERINFO_URI=https://api.github.com/user
OIDC_USERNAME_CLAIM=name
# 让登录界面显示为“使用 GitHub 继续”
OIDC_DISPLAY_NAME=GitHub
实现的思路
- Outline 支持通过 OIDC 完成用户身份验证与登录
- OIDC 是建立在 OAuth 2.0 之上的一个身份层,其中约定了一个通过 OAuth 2.0 进行身份验证的 UserInfo Endpoint,客户端可以请求这个 Endpoint 来获得用户的一些基本信息。
- GitHub 支持第三方 APP 通过 OAuth 2.0 接入
虽然 GitHub 没有提供符合 OIDC 实现的 UserInfo Endpoint 来读取用户的基本信息,但幸运的是通过合适的配置(OIDC_USERINFO_URI
, OIDC_SCOPES
以及 OIDC_USERNAME_CLAIM
),可以让 Outline 通过 GitHub 提供的 /user API 等效地完成用户基本信息的获取。
如果配置正确,点击 Outline 首页的 使用 GitHub 继续
按钮后,应该看到如图所示的授权页面,授权完成后将重定向回 Outline 并且为已登录状态。
按照配置完成后,outline跳转后缀回登陆界面,显示url路径为/?notice=authentication-required,且前端显示一个(!)感叹号,是什么问题
OAuth 授权后跳转到
/?notice=authentication-required
可能是 OAuth 授权登录失败导致。具体的登录失败原因可以在 Outline 打印到控制台的日志中查看。在profile中设置公共电子邮件就可以了,https://api.github.com/user只能获取到公共电子邮件。
新主题不错呀,wiki看起来不错,哪天测试玩玩
这个感觉不错~