密碼模式
前面介紹了授權碼模式和刷新令牌兩種獲取最新令牌的方法,下面來看一下其它模式。首先看密碼模式,我們默認配置的三種模式中其實就包含密碼模式的支持:
因此我們啟動項目,直接使用密碼模式即可,訪問地址是:
- http://ip:port/oauth/token
參數有五個,分別是:
- grant_type:密碼模式值必須為 password
- username:用戶名
- password:密碼
- client_id:客戶端id
- client_secret:客戶端秘鑰
訪問示例如下:
密碼模式適用於用戶高度信任的情況,只有高度信息才能傳用戶名密碼,謹慎使用。
隱藏模式
有些web應用是純前端的應用,需要允許授權服務直接向前端頒發令牌。這種方式沒有授權碼這個中間步驟,所以稱為(授權碼)"隱藏式"(implicit)。訪問鏈接示例如下:
- http://localhost:8028/oauth/authorize?clientid=clientId&responsetype=token&redirect_uri=http://localhost:8028/&scope=all
可以看到這種方式比授權碼模式多了一個scope參數,在使用隱藏模式之前,需要授權服務支持隱藏模式,就需要在授權類型中加上 implicit:
然後將上面的鏈接輸入到瀏覽器,會出現登錄頁面,登錄成功後,鏈接中會直接出現令牌:
注意,令牌的位置是 URL 錨點(fragment),而不是查詢字符串(querystring),這是因為 OAuth 2.0 允許跳轉網址是 HTTP 協議,因此存在"中間人攻擊"的風險,而瀏覽器跳轉時,錨點不會發到服務器,就減少了洩漏令牌的風險。
憑證模式
最後一種方式是憑證式(client credentials),適用於沒有前端的命令行應用,即在命令行下請求令牌。請求地址如下:
- http://localhost:8028/oauth/token?granttype=clientcredentials&clientid=clientId&clientsecret=secret
請求前,先在授權類型中配置憑證模式:
請求結果示例:
這種方式給出的令牌,是針對第三方應用的,而不是針對用戶的,即有可能多個用戶共享同一個令牌。
代碼地址: https://gitee.com/blueses/spring-boot-security 28
本文由博客一文多發平臺 https://openwrite.cn?from=article_bottom 發佈!
閱讀更多 程序員郭藝賓 的文章