首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring Security OAuth2 核心知識匯總:授權流程、端點、配置與核心類速查

     編輯:Java 綜合教學

Spring Security OAuth2 核心知識匯總:授權流程、端點、配置與核心類速查

Spring Security OAuth2 是構建授權服務器、資源服務器的標準框架。本文匯總授權碼、隱式、密碼、客戶端憑證四大授權類型流程、關鍵端點 URL、核心配置屬性、過濾器鏈順序、核心處理類,作為開發調試時的桌面速查手冊。

一、四大授權類型與適用場景

授權類型response_type / grant_type適用場景核心流程
Authorization Code (授權碼)code / authorization_code服務端 Web 應用 (最安全)重定向登錄 → 獲取 code → 後端換 token
Implicit (隱式)token / implicit純前端 SPA / 移動端重定向登錄 → 直接返回 token (無 refresh_token)
Resource Owner Password Credentials (密碼)password / password高度信任的第一方客戶端用戶名密碼直接換 token
Client Credentials (客戶端憑證)client_credentials / client_credentials機器間通信、後台服務client_id/secret 直接換 token

二、關鍵端點 URL (默認路徑前綴 /oauth)

  • 授權端點:GET /oauth/authorize — 用戶確認授權頁面
  • 令牌端點:POST /oauth/token — 換取/刷新 access_token
  • 確認授權端點:POST /oauth/confirm_access — 用戶提交授權確認
  • 錯誤端點:/oauth/error — 授權錯誤展示

三、授權碼模式完整交互流程 (最常用)

# 1. 客戶端發起授權請求 (瀏覽器重定向)
GET /oauth/authorize?
    client_id=jerry&
    redirect_uri=http%3A%2F%2Fclient.com%2Fcallback&
    response_type=code&
    scope=read&
    state=xyz

# 2. 用戶登錄並確認授權 → 授權服務器重定向回客戶端
HTTP 302 Location: https://client.com/callback?code=FlmXb7&state=xyz

# 3. 客戶端後端換取 Token (POST, Basic Auth 或體參數傳 client_id/secret)
POST /oauth/token?
    grant_type=authorization_code&
    code=FlmXb7&
    redirect_uri=http%3A%2F%2Fclient.com%2Fcallback&
    client_id=jerry&
    client_secret=1111

# 4. 響應
{
  "access_token": "3e85af06-245e-433f-a533-400dccba6b12",
  "token_type": "bearer",
  "refresh_token": "58f4dabb-8c54-4cdd-af36-b87d64eeda94",
  "expires_in": 43199,
  "scope": "read"
}

# 5. 攜帶 Token 訪問資源
GET /api/resource?access_token=xxx
或 Header: Authorization: Bearer xxx

# 6. 刷新 Token
POST /oauth/token?
    grant_type=refresh_token&
    refresh_token=58f4dabb-8c54-4cdd-af36-b87d64eeda94&
    client_id=jerry&
    client_secret=1111

四、核心配置屬性速查

<authorization-server> 關鍵屬性

屬性含義
authorization-code / implicit / refresh-token / client-credentials / password啟用對應授權類型
client-details-service-refClientDetailsService Bean 引用
token-services-refTokenServices Bean 引用 (管理 token 存儲/生成/驗證)
user-approval-handler-ref用戶授權確認處理器 (自定義確認頁邏輯)
token-endpoint-url / authorization-endpoint-url自定義端點路徑

ClientDetails 關鍵字段

  • clientId (必填)、clientSecret (機密客戶端必填)
  • scope:權限範圍 (如 read, write, trust)
  • authorizedGrantTypes:允許的授權類型列表
  • redirectUris:授權碼/隱式模式回調地址白名單
  • accessTokenValiditySeconds / refreshTokenValiditySeconds

五、Spring Security 過濾器鏈核心順序 (節選 OAuth 相關)

  1. ChannelProcessingFilter
  2. SecurityContextPersistenceFilter
  3. ConcurrentSessionFilter
  4. 認證過濾器鏈 (UsernamePasswordAuthenticationFilter 等)
  5. SecurityContextHolderAwareRequestFilter
  6. RememberMeAuthenticationFilter
  7. AnonymousAuthenticationFilter
  8. ExceptionTranslationFilter
  9. FilterSecurityInterceptor (URL 權限攔截)
  10. OAuth2 專用過濾器:
    • OAuth2AuthenticationProcessingFilter (資源服務器驗證 Bearer Token)
    • ClientCredentialsTokenEndpointFilter (Token 端點 client_id/secret 驗證)

六、核心處理類映射

端點/功能核心類職責
/oauth/authorizeAuthorizationEndpoint處理授權請求、生成 code、重定向
/oauth/tokenTokenEndpoint處理 token 請求、驗證 grant_type、生成/刷新 token
/oauth/confirm_accessWhitelabelApprovalEndpoint / 自定義 Controller用戶授權確認頁面
資源驗證OAuth2AuthenticationProcessingFilter解析 Bearer Token、驗證有效性、構建 Authentication
Token 存儲TokenStore (InMemory/Jdbc/Redis/Jwt)access_token/refresh_token 持久化
Client 管理ClientDetailsService (Jdbc/InMemory)加載客戶端信息
用戶認證UserDetailsService加載用戶信息 (密碼模式)

七、關鍵接口三要素

// 核心三大 Service 接口
TokenServices tokenService;        // token 生成/驗證/刷新/存儲
ClientDetailsService clientService; // 客戶端信息加載
UserDetailsService userService;     // 用戶信息加載 (密碼模式)

八、總結

Spring Security OAuth2 以「授權服務器 + 資源服務器」架構實現 OAuth 2.0 標準。掌握四大授權類型適用場景、端點交互細節、核心配置屬性、過濾器鏈位置、三大核心 Service 接口,是快速排查授權失效、Token 刷新失敗、權限不足等問題的關鍵。建議將本文作為開發調試時的隨手查閱資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved