SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

密碼模式

前面介紹了授權碼模式和刷新令牌兩種獲取最新令牌的方法,下面來看一下其它模式。首先看密碼模式,我們默認配置的三種模式中其實就包含密碼模式的支持:

SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

因此我們啟動項目,直接使用密碼模式即可,訪問地址是:

  • http://ip:port/oauth/token

參數有五個,分別是:

  • grant_type:密碼模式值必須為 password
  • username:用戶名
  • password:密碼
  • client_id:客戶端id
  • client_secret:客戶端秘鑰

訪問示例如下:

SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

密碼模式適用於用戶高度信任的情況,只有高度信息才能傳用戶名密碼,謹慎使用。

隱藏模式

有些web應用是純前端的應用,需要允許授權服務直接向前端頒發令牌。這種方式沒有授權碼這個中間步驟,所以稱為(授權碼)"隱藏式"(implicit)。訪問鏈接示例如下:

  • http://localhost:8028/oauth/authorize?clientid=clientId&responsetype=token&redirect_uri=http://localhost:8028/&scope=all

可以看到這種方式比授權碼模式多了一個scope參數,在使用隱藏模式之前,需要授權服務支持隱藏模式,就需要在授權類型中加上 implicit:

SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

然後將上面的鏈接輸入到瀏覽器,會出現登錄頁面,登錄成功後,鏈接中會直接出現令牌:

SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

注意,令牌的位置是 URL 錨點(fragment),而不是查詢字符串(querystring),這是因為 OAuth 2.0 允許跳轉網址是 HTTP 協議,因此存在"中間人攻擊"的風險,而瀏覽器跳轉時,錨點不會發到服務器,就減少了洩漏令牌的風險。

憑證模式

最後一種方式是憑證式(client credentials),適用於沒有前端的命令行應用,即在命令行下請求令牌。請求地址如下:

  • http://localhost:8028/oauth/token?granttype=clientcredentials&clientid=clientId&clientsecret=secret

請求前,先在授權類型中配置憑證模式:

SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

請求結果示例:

SpringBootSecurity學習(23)前後端分離版之OAuth2.0 其它模式

這種方式給出的令牌,是針對第三方應用的,而不是針對用戶的,即有可能多個用戶共享同一個令牌。

代碼地址: https://gitee.com/blueses/spring-boot-security 28

本文由博客一文多發平臺 https://openwrite.cn?from=article_bottom 發佈!


分享到:


相關文章: