Spring-security-oAuth2分享


Spring-security-oAuth2分享

oAuth2簡介

OAuth 2.0是用於授權的行業標准協議。OAuth 2.0致力於簡化客戶端開發人員的工作,同時為Web應用程序,桌面應用程序,移動電話和客廳設備提供特定的授權流程。該規范及其擴展正在IETF OAuth工作組內開發。


代碼地址

https://github.com/guo-yong123/spring-cloud-security-oauth2.git

oAuth2主要包含有以下主要角色

  • 資源所有者

  • 客戶端 包括 client_id和client_secret

  • 認證服務器(Authorization server): 即服務提供商專門用來處理認證的服務器,簡單點說就是登錄功能(驗證用戶的賬號密碼是否正確以及分配相應的權限)

  • 資源服務器(Resource server): 即服務提供商存放用戶生成的資源的服務器。它與認證服務器,可以是同一台服務器,也可以是不同的服務器。簡單點說就是資源的訪問入口,比如上節中提到的“雲筆記服務”和“雲相冊服務”都可以稱之為資源服務器。

  • 交互流程

oAuth2四種授權類型,主要說下授權碼模式和密碼模式

  • 授權碼模式

    • 授權碼是一個臨時性的憑證,用來換取access_token和refresh_token

      code只能使用一次,用完作廢。

    • 這個 code 的作用是保護 token 的安全性。如果直接把 token 返回給應用,很容易被攔截、竊聽。引入了 code 之后,即使攻擊者能夠竊取到 code,但是由於他無法獲得應用保存在服務器的 client_secret,因此也無法通過 code 換取 token。使用code換取token為什么不容易被攔截、竊聽呢?這是因為,首先,這是一個從服務器到服務器的訪問,黑客比較難捕捉到;其次,這個請求通常要求是 https 的實現。即使能竊聽到數據包也無法解析出內容。

      有了這個 code,token 的安全性大大提高。因此,oAuth2.0 鼓勵使用這種方式進行授權,而簡單模式則是在不得已情況下才會使用。

    • 獲取授權碼
      http://localhost:9090/oauth/authorize?client_id=client&response_type=code 
      
    • 獲取token  
      http://localhost:8080/oauth/token?grant_type=authorization_code&code=
      
  • 密碼模式

    • 密碼模式中,用戶向客戶端提供自己的用戶名和密碼。客戶端使用這些信息,向 "服務商提供商" 索要授權。在這種模式中,用戶必須把自己的密碼給客戶端,但是客戶端不得儲存密碼。這通常用在用戶對客戶端高度信任的情況下,比如客戶端是操作系統的一部分。

      一個典型的例子是同一個企業內部的不同產品要使用本企業的 oAuth2.0 體系。

      獲取token
      http://localhost:9090/oauth/token?username=user&password=123456&grant_type=password&scope=select&client_id=client_2&client_secret=123456
      
  • oauth2提供的默認端點

    • /oauth/authorize:授權端點
      /oauth/token:令牌端點
      /oauth/confirm_access:用戶確認授權提交端點
      /oauth/error:授權服務錯誤信息端點
      /oauth/check_token:用於資源服務訪問的令牌解析端點
      /oauth/token_key:提供公有密匙的端點,如果使用JWT令牌的話
      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM