项目笔记:Ark-Identity-System (A.I.S) - 基于 Authing 的身份认证集成SOP

项目代号: A.I.S
核心服务: Authing
集成目标: 为 Waline 评论系统提供统一的、支持社交登录的、非强制性的用户认证服务。

第一部分:Authing 核心概念与选型

1.1 什么是 Authing?

  • Authing 是一个中心化的身份认证解决方案。它将复杂的“用户注册、登录、密码管理、社交登录集成、安全策略”等功能,全部打包成一个独立的云服务。
  • 类比: 它就像为你的所有应用(博客、未来的APP等)提供了一个统一的“鹰角网络通行证”系统。

1.2 为什么选择 Authing?

  • 国内优先: 服务器在国内,访问速度快,稳定性高,符合项目要求。

  • 功能全面: 免费版已提供足够强大的功能,包括社会化登录(GitHub)、自定义UI、安全策略等。

  • 解耦: 将用户身份管理从我们的 Waline 后端服务中剥离出来,实现了专业化分工。Waline 只负责评论,Authing 只负责身份,架构更清晰。

  • 强大的兼容性: 与 Waline 等现代应用有良好的集成支持。


第二部分:Authing 平台配置

2.1 创建用户池 (User Pool)

  • 操作: 登录 Authing 控制台 -> 创建用户池。

  • 关键选择: 选择 B2C (Business to Customer) 类型的用户池。B2E 适用于企业内部员工,不符合我们面向广大读者的场景。

  • 命名: 用户池命名为 arknights-blog-users。这个池子就是存放所有博客读者的独立“档案室”

    image-20250730174115324

2.2 创建自建应用

  • 操作: 在 arknights-blog-users 用户池下 -> 应用 -> 自建应用 -> 创建。
  • 作用: 这个“应用”是我们的 Waline 评论系统在 Authing 中的唯一身份。Waline 就是通过这个应用的 App ID 来和 Authing 对话的。
  • 关键信息提取: 在应用的“配置”页面,必须记录下以下两个核心参数:
    • App ID: 一长串唯一字符串。
    • 应用域名 (appDomain): 形如 your-app-domain.authing.cn

image-20250730174932144

2.3 配置登录回调 URL (最关键的安全配置)

  • 作用: 定义用户在 Authing 成功登录后,被允许安全跳转回的目标地址。如果目标地址不在此列表中,Authing会拒绝跳转。
  • 配置: 在“应用配置”->“登录回调 URL”中,添加所有可能的访问路径:
    • 线上生产域名: https://linuxnc.xyz
    • 线上 www 域名: https://www.linuxnc.xyz
    • 本地测试IP: http://10.0.0.55:4000
    • 本地测试域名: http://localhost:4000

image-20250730175049374

2.4 配置社会化登录 (以 GitHub 为例)

  • 目标: 让用户可以在 Authing 登录框中看到“使用 GitHub 登录”的按钮。
  • 双向配置流程:
    1. 在 Authing 端:
      • 进入 社会化身份源 -> 添加/配置 GitHub
      • Authing 会提供一个专用的“回调地址”,形如 https://core.authing.cn/connections/social/.../callback
      • 复制这个地址。
    2. 在 GitHub 端:
      • 登录 GitHub -> Settings -> Developer settings -> OAuth Apps -> New OAuth App。
      • 填写应用名称和主页URL。
      • 将从 Authing 复制的那个回调地址,精确地粘贴到 “Authorization callback URL” 输入框中。
      • 创建应用,获取 Client IDClient Secret
    3. 回到 Authing 端:
      • 将从 GitHub 获取的 Client IDClient Secret 填回到 Authing 的 GitHub 身份源配置页面。
      • 设置 Scopes (授权范围):只保留最核心的 user:emailread:user 权限,避免过度索权。
      • 关联应用: 在该身份源的“应用连接”中,开启你的博客应用

第三部分:与 Waline 前端的最终集成

这一步是在博客主题的配置文件 _config.butterfly.yml 中,告诉 Waline 前端如何与我们配置好的 Authing 服务进行交互。

3.1 核心配置 (_config.butterfly.yml -> waline.option)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
option:
# 1. 允许游客评论,同时提供登录选项
login: false
requiredMeta: ['nick', 'mail']
avatar: 'qq'

# 2. [关键] 定义 Authing 为第三方登录提供商
provider:
- name: Authing
# 填入从 Authing 应用配置中获取的信息
appId: '你的Authing应用的AppID'
appDomain: '你的Authing应用域名'
# (可选) 定义你希望请求的用户信息
scope: 'openid profile email phone'

3.2 用户体验流程

  • 未登录用户看到评论框和昵称/邮箱输入框。
  • 点击“登录”按钮。
  • Waline 前端脚本读取 provider 配置,将页面重定向到 Authing 的托管登录页。
  • 用户在 Authing 页面选择 GitHub 登录,授权后,被 Authing 安全地重定向回博客的评论区。
  • Waline 脚本拿到 Authing 返回的凭证,完成登录,评论框切换到“已登录”状态。