OAuth Server
This is work in progress, will introduce more about how OAuth work in Blocklet Server
简介#
Blocklet Service 可以作为 OAuth Server 服务,支持标准 OAuth 2.0 授权码模式(Authorization Code Grant),可用于为第三方应用(如 Grafana)提供统一的身份认证和授权服务。流程与 GitHub/Google OAuth 类似,兼容 OpenID Connect
支持功能:
- OAuth 2.0 授权码授权流程(Authorization Code Grant)
- OpenID Connect 基础用户信息获取
- 可与 Grafana 等支持 Generic OAuth 的服务对接
- 可定制的授权页面与 Scope 管理
授权流程概览#
- 用户在第三方应用选择 OAuth 登录
- 应用将用户重定向到本地 OAuth Server 进行身份验证和授权
- 用户同意授权后,OAuth Server 回调应用并携带授权码
- 应用用授权码换取访问令牌(access token)
- 应用用 access token 获取用户信息,完成登录
授权流程详解#
用户授权#
第三方应用会将用户重定向到如下 URL:
GET https://your-oauth-server/oauth/authorize
?client_id=YOUR_CLIENT_ID
&redirect_uri=YOUR_REDIRECT_URI
&scope=openid%20profile%20email
&state=RANDOM_STRING
&response_type=code
参数说明:
- client_id:应用的 Client ID
- redirect_uri:回调地址,需与注册时一致
- scope:请求的权限范围
- state:防 CSRF,建议随机生成
- response_type:固定为 code
用户同意授权#
用户登录并同意授权后,OAuth Server 会重定向回 redirect_uri,并携带 code 和 state:
GET YOUR_REDIRECT_URI?code=AUTH_CODE&state=RANDOM_STRING
应用换取 Token#
用授权码换取 access token:
POST https://your-oauth-server/oauth/token
Content-Type: application/x-www-form-urlencoded
client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&code=AUTH_CODE
&grant_type=authorization_code
&redirect_uri=YOUR_REDIRECT_URI
返回:
{
"access_token": "ACCESS_TOKEN",
"token_type": "bearer",
"expires_in": 3600,
"refresh_token": "REFRESH_TOKEN",
"scope": "openid profile email"
}
获取用户信息#
用 access token 获取用户信息:
GET https://your-oauth-server/oauth/userinfo
Authorization: Bearer ACCESS_TOKEN
{
"sub": "user_id",
"name": "用户名",
"email": "邮箱"
}