跳到主要内容

OAuth Server

This is work in progress, will introduce more about how OAuth work in Blocklet Server 简介 Blocklet Service 可以作为 OAuth Server 服务,支持标准 OAuth 2.0 授权码模式(Au

说明

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:

javascript
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:

javascript
GET YOUR_REDIRECT_URI?code=AUTH_CODE&state=RANDOM_STRING

应用换取 Token

用授权码换取 access token:

javascript
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

返回:

javascript
{
  "access_token": "ACCESS_TOKEN",
  "token_type": "bearer",
  "expires_in": 3600,
  "refresh_token": "REFRESH_TOKEN",
  "scope": "openid profile email"
}

获取用户信息

用 access token 获取用户信息:

javascript
GET https://your-oauth-server/oauth/userinfo
Authorization: Bearer ACCESS_TOKEN
javascript
{
  "sub": "user_id",
  "name": "用户名",
  "email": "邮箱"
}