Springboot2.0 + OAuth2.0之受權碼模式

綜述:上兩回講了密碼模式,應該是淺顯易懂。若有補充,不足或者是有誤之處還請多多指出。如今重頭戲,受權碼模式開始。java

1、具體操做流程spring

- 用戶訪問客戶端,後者將前者導向認證服務器,認證服務器返回認證頁面(帳號密碼或者其餘認證方式)

- 用戶選擇是否給予客戶端受權。

- 假設用戶給予受權,認證服務器將用戶導向客戶端事先指定的"重定向URI"(redirection URI),同時附上一個受權碼。

- 客戶端收到受權碼,附上早先的"重定向URI",向認證服務器申請令牌。這一步是在客戶端的後臺的服務器上完成的,對用戶不可見。

- 認證服務器覈對了受權碼和重定向URI,確認無誤後,向客戶端發送訪問令牌(access token)和更新令牌(refresh token)。

2、實踐測試瀏覽器

一樣是使用上回使用的認證服務器。記得將資源配置註釋掉服務器

(1)在瀏覽器訪問認證服務器獲取 code:http://localhost:8001/oauth/authorize?client_id=client&response_type=code&scope=all&redirect_uri=http://www.baidu.com (get), 結果以下:spring-boot

認證服務器會重定向到 login 頁面讓用戶進行登陸受權。此時用戶輸入用戶名和密碼進行受權。成功以後認證服務器重定向到指定的 url (這裏爲 www.baidu.com):post

(2)在重定向的 url 後面會帶上 code,此時客戶端則能夠拿這個 code 去換取 token,換取鏈接:http://localhost:8001/oauth/token?client_id=client&client_secret=123456&grant_type=authorization_code&redirect_uri=http://www.baidu.com&code=AKAQUe (post)
測試

 

(3)跟上回說的那樣,拿到 token 便可訪問資源了ui


 

問題總結:
url

(1)Java.io.NotSerializableException Problem (UserDetails的實現類沒有實現Serializable接口致使  )spa

(2)User account is locked   (isAccountNonLocked 屬性設置爲了false,應該設置爲true)

(3)解決Spring Security OAuth在訪問/oauth/token時候報401 authentication is required(解決參考:https://blog.csdn.net/u012040869/article/details/80140515)


 

參考資料:

(1)四中模式概述:https://blog.csdn.net/weixin_42033269/article/details/80086422

(2)userDetailsService:https://www.journaldev.com/2736/spring-security-example-userdetailsservice

(3)spring security Oauth 2.0 authentication server example: https://javadeveloperzone.com/spring-boot/spring-security-oauth-2-0-authentication-server/#26_Demo

(4)OAuth2 tables: https://stackoverflow.com/questions/34170281/spring-boot-oauth2-with-jdbc-token-store-gives-oauth-access-token-relation-doesn

(5)受權碼模式:http://www.javashuo.com/article/p-kkpdiwgd-ba.html

(6)Spring Boot OAuth2.0密碼模式:http://www.javashuo.com/article/p-hodekdhc-a.html


 

後續:由此史上最簡潔Springboot2.0 + OAuth2.0 暫時告一段落。。。

相關文章
相關標籤/搜索