oauth2及時從一個項目A申請另一個項目B的訪問的時候,不用在項目A輸入項目B的用戶名和密碼,個人理解先跳轉到項目B,利用項目B的用戶名和密碼得到一個code之類的,這里有點像openID,不過不是的,這是用戶某次授權的,不是用戶唯一標識一致可以授權,做了2個關於oauth2的demo,這里記錄一下
用戶從A訪問B的地址,例如:localhost:8080/oauth/authorize?client_id=client&response_type=code&redirect_uri=http://www.baidu.com,然后需要輸入spring security的用戶名和密碼,選擇Approve,這里有點像,王者榮耀確認獲取微信信息的界面
利用B的用戶名和密碼得到code,然后訪問 http://client:secret@localhost:8080/oauth/token?grant_type=authorization_code&code=Li4NZo&redirect_uri=http://www.baidu.com得到access_token,有了access_token了就可以訪問項目B了,到時候把access_token作為參數帶過去了就好了就可以訪問了,這樣我們就算不知道項目B的用戶名和密碼也可以訪問服務B的資源了
這里也可以直接訪問 http://client:secret@localhost:8080/oauth/token的地址直接得到access_token,例如:http://localhost:8080/oauth/token?grant_type=password&username=user&password=123&scope=settingw,不過這樣就需要項目A有項目B的用戶名和密碼了,這現實嗎,肯定不現實
最后我們可以指定是否要refsh_token,access_token,過期時間expires_in等等
github源碼地址:https://github.com/waterlufei/spring-boot.git,下面的Oauth2SpringCloud和TestOauth2都是些的demo,用的jar包不一樣一個用了spring boot的,一個用了spring cloud的