Skip to main content

OAuth 对接文档

本文档提供完整的第三方应用对接指南,帮助您将 NodeLoc OAuth Provider 集成到您的应用中。

📋 目录

🚀 快速开始

1. 创建 OAuth 应用

访问 NodeLoc 论坛并创建 OAuth 应用(需要黄金会员 TL2 及以上):
OAuth 应用管理页面
记录以下信息:
  • Client ID: 应用的唯一标识符
  • Client Secret: 应用密钥(只显示一次,请妥善保管)
  • Redirect URI: 授权后的回调地址
如果应用申请了 email 权限范围,创建后需要管理员审核才能使用。

2. 配置环境变量

3. 开始集成

选择您的开发语言,参考下方的集成示例快速开始。

🔐 OAuth 2.0 授权流程

流程图

详细步骤

步骤 1: 重定向到授权页面

将用户重定向到以下 URL:
参数说明: 可用的 Scope(权限范围): 注意事项:
  • 如果应用申请了 email 权限,需要管理员审核后才能使用
  • 审核状态可以在应用管理页面查看
  • 未通过审核的应用将无法完成授权流程

步骤 2: 接收授权码

用户授权后,NodeLoc 会重定向回您的 redirect_uri,并附带授权码: 授权成功:
用户拒绝授权:
错误参数说明: 处理建议:
  • 检查是否存在 error 参数来判断授权是否成功
  • 如果用户拒绝授权,应该友好地提示用户,并提供重新授权的选项
  • 记录拒绝授权的事件,以便分析用户行为
示例代码(Node.js):
安全提示: 请验证 state 参数是否与步骤 1 发送的一致。

步骤 3: 交换 Access Token

使用授权码交换 Access Token:
响应示例:

步骤 4: 获取用户信息

使用 Access Token 获取用户信息:
响应示例:
字段说明:

🔌 API 端点

授权端点

用于发起授权请求,用户需要在浏览器中访问此端点。

Token 端点

用于交换授权码获取 Access Token,或使用 Refresh Token 刷新访问令牌。 支持的 Grant Types:
  • authorization_code - 授权码模式
  • refresh_token - 刷新令牌(如果支持)

UserInfo 端点

使用 Access Token 获取当前授权用户的信息。 请求头:

OIDC Discovery 端点(可选)

返回 OIDC 配置信息,支持自动发现。

💻 集成示例

Node.js + Express

安装依赖

完整示例代码

环境变量配置

创建 .env 文件:

运行应用

访问 http://your-url.com 即可看到登录页面。

Python + Flask

安装依赖

完整示例代码

运行应用


Ruby on Rails + Devise

Gemfile

config/initializers/devise.rb

app/models/user.rb

app/controllers/users/omniauth_callbacks_controller.rb


❓ 常见问题

1. 如何处理 Token 过期?

Access Token 默认有效期为 2 小时(7200 秒)。过期后需要重新授权,或使用 Refresh Token(如果支持)。

2. 如何处理错误?

所有错误都会返回标准的 OAuth 2.0 错误格式:
常见错误代码:

3. name 字段为空怎么办?

当用户没有设置显示名称时,name 字段会自动使用 username 的值。您不需要做额外处理。

4. 如何测试 OAuth 集成?

使用以下测试脚本快速验证:

5. 支持哪些 Scope?

目前支持以下 scope:
  • openid - 标准 OpenID Connect scope(必需,不可取消
  • profile - 用户资料(头像、个人简介等)
  • email - 用户邮箱地址(需要管理员审核
示例:
重要提示:
  • openid scope 是必需的,创建应用时会自动包含且无法取消
  • 如果您的应用申请了 email scope,应用创建后需要管理员审核批准才能正常使用。

6. 应用审核状态说明

当您的应用申请了需要审核的权限(如 email)时,应用会处于以下状态之一: 如何查看审核状态:
  1. 访问 https://www.nodeloc.com/oauth-provider/applications
  2. 在应用列表中查看”审核状态”列
  3. 待审核的应用会显示黄色警告图标
审核被拒绝的处理:
  • 联系 NodeLoc 管理员了解拒绝原因
  • 如果不需要 email 权限,可以编辑应用并移除该权限
  • 修改后的应用如果不包含需要审核的权限,会自动变为”已批准”状态

7. 如何保护 Client Secret?

重要安全提示:
  • 服务端存储: 将 Client Secret 存储在服务器端环境变量中
  • HTTPS 通信: 生产环境必须使用 HTTPS
  • 定期更换: 定期在 NodeLoc 中重新生成 Client Secret
  • 不要暴露: 永远不要将 Secret 提交到版本控制或前端代码中
  • 不要记录: 不要在日志中记录完整的 Secret

8. 生产环境部署清单

部署前请确认以下事项:
  • 使用 HTTPS 协议
  • 配置正确的 Redirect URI
  • 环境变量安全存储
  • 实现错误处理和日志记录
  • 添加 State 参数防止 CSRF
  • 实现 Token 刷新机制
  • 配置会话超时
  • 添加用户退出登录功能
  • 测试完整的授权流程