NodeLoc OAuth2 快速开始
NL OAuth2是一个基于Discourse的SSO的身份认证服务,允许应用程序使用NL用户系统进行身份验证和授权。
服务端点
快速开始流程
获取凭据
获取 Client ID 和 Client Secret(请妥善保存)
实现授权流程
按照 OAuth2 标准流程实现用户授权
应用注册
1. 访问管理界面
- 访问 https://conn.nodeloc.cc/apps
- 首次访问会重定向到NL进行身份验证
- 登录后点击”Create New Application”
2. 填写应用信息
应用名称: My App
描述: My OAuth2 Application
重定向URI: https://myapp.com/auth/callback
允许的组: trust_level_0 (可选)
拒绝的组: banned (可选)
重要: 保存显示的Client Secret,它只会显示一次
3. 获取应用凭据
注册成功后,你将获得:
- Client ID: 用于标识应用
- Client Secret: 用于应用认证
- 重定向URI: 用户授权后的回调地址
OAuth2 标准流程
流程概览
快速示例
// 1. 重定向到授权页面
const authUrl = 'https://conn.nodeloc.cc/oauth2/auth?' + new URLSearchParams({
response_type: 'code',
client_id: 'YOUR_CLIENT_ID',
redirect_uri: 'https://myapp.com/callback',
scope: 'openid profile',
state: 'random_state_string'
});
window.location.href = authUrl;
// 2. 处理回调,交换令牌
const response = await fetch('https://conn.nodeloc.cc/oauth2/token', {
method: 'POST',
headers: {
'Authorization': 'Basic ' + btoa('CLIENT_ID:CLIENT_SECRET'),
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
grant_type: 'authorization_code',
code: 'authorization_code_here',
redirect_uri: 'https://myapp.com/callback'
})
});
const tokens = await response.json();
// 3. 获取用户信息
const userResponse = await fetch('https://conn.nodeloc.cc/oauth2/userinfo', {
headers: { 'Authorization': 'Bearer ' + tokens.access_token }
});
const userInfo = await userResponse.json();
安全最佳实践
客户端密钥保护
永远不要在前端代码中暴露Client Secret
- 使用环境变量存储敏感信息
- 在服务器端处理令牌交换
- 定期轮换客户端密钥
CSRF 防护
- 生成随机state值
- 在回调中验证state参数
- 使用HTTPS传输敏感数据
令牌管理
- 安全存储访问令牌和刷新令牌
- 实现令牌自动刷新机制
- 处理令牌过期情况
下一步