Open Aphelion
试试 Distortion
← 返回在轨作品

WORK 02· v1 · SELF-HOSTED

Aphelion IdP

统一身份认证平台 · OAuth2 授权码 + PKCE / OIDC · 零第三方运行时依赖

管理和授权 Aphelion 账号的独立身份服务:给 Distortion 等客户端应用提供标准 OIDC 登录,账号与应用授权统一在一个平台里管理。零依赖不是口号——server 只用 Node 内置模块(http / crypto / fs),npm install 都省了。

OAuth2 + PKCE OIDC 0 third-party deps Tauri 86 MB Node SEA 83 MB verify 17/17

A· 标准端点 / ENDPOINTS

该有的端点一个不少。

OAuth2 / OIDC

  • GET  /oauth/authorize
  • POST /oauth/token
  • GET  /oauth/userinfo
  • POST /oauth/revoke
  • GET  /.well-known/openid-configuration

平台

  • 控制台 · http://127.0.0.1:7788/
  • GET  /health
  • scope:openid · profile · email · apps
  • id_token:HS256 签名 JWT

B· 接入 / QUICK START

标准授权码 + PKCE,十分钟接入。

# 1 · 登记应用后,引导用户浏览器打开
GET  /oauth/authorize?client_id=...&redirect_uri=...&response_type=code
     &scope=openid profile&state=...&code_challenge=...&code_challenge_method=S256
# → 登录 / 同意 → 302 redirect_uri?code=...&state=...

# 2 · 后端换令牌(PKCE:code_verifier)
POST /oauth/token
     grant_type=authorization_code & code=... & redirect_uri=...
     & client_id=... & code_verifier=...

# 3 · 携带访问令牌取用户信息 · 刷新 · 吊销
GET  /oauth/userinfo   Authorization: Bearer <access_token>
POST /oauth/token      grant_type=refresh_token & refresh_token=...
POST /oauth/revoke     token=...

Distortion 桌面端的「账号面板 → Aphelion 账号」就是这样接入的:点击后系统浏览器打开授权页,登录并同意后回到播放器,应用内不需要填任何密钥。登录态保存在 userData/aphelion-auth.json——主进程持有,渲染进程拿不到令牌。

C· 安全设计 / SECURITY

每一条都是防线,不是装饰。

凭据

  • scrypt 随机盐 64 字节 · timingSafeEqual 比对
  • 管理员会话 HttpOnly + SameSite=Lax · 12 小时
  • 停用账号或改密 → 立即吊销全部会话与令牌

令牌

  • 授权码 5 分钟有效 · 一次性 · 绑定 client 与回调
  • refresh_token 轮换,旧令牌立即失效
  • PKCE 强制 S256

边界

  • 回调地址按登记值精确匹配,未登记直接 400
  • 内置客户端不可删除,防止误伤登录链路
  • 面向本机与内网;公网需 HTTPS、限流与锁定(未内置,不放)

运维

  • 审计日志:登录(含失败)/ 授权 / 变更,留 2000 条
  • JSON 原子写 · 损坏自动备份并起空库
  • node verify.mjs 端到端 17/17

D· 四种启动形态 / FORMS

从 2.7 MB 外壳到一个 exe。

Tauri 桌面版 · 推荐

外壳 2.7 MB + Node SEA 侧车 83 MB = 86 MB。系统 WebView2 渲染控制台,关窗即退,单实例复用 7788 端口。

dist-tauri\Aphelion 统一身份认证.exe

Electron 兼容版

278 MB,自带 Chromium,不依赖系统 WebView2,行为与 Tauri 版一致——老系统的兜底。

dist-gui\Aphelion IdP.exe

SEA 单文件服务

83 MB 单文件 exe,双击起服务并自动开控制台,数据写同级 data/store.json——适合当后台服务常驻。

dist\Aphelion IdP.exe

源码直启

Node 20+ 即可:node server.mjs。没有依赖安装步骤,因为根本没有依赖。

node server.mjs