spring-oauth-serverSpring與Oauth2整合示例
spring-oauth-server
Spring與Oauth2的整合示例
項(xiàng)目用Maven管理
使用的技術(shù)與版本號(hào)
Spring (3.1.1.RELEASE)
Spring Security (3.1.0.RELEASE)
MyBatis (3.2.1)
spring-security-oauth2 (1.0.5.RELEASE)
客戶端demo項(xiàng)目請(qǐng)?jiān)L問(wèn) spring-oauth-client
如何使用?
項(xiàng)目是Maven管理的, 需要本地安裝maven(開(kāi)發(fā)用的maven版本號(hào)為3.1.0), 還有MySql(開(kāi)發(fā)用的mysql版本號(hào)為5.5)
下載(或clone)項(xiàng)目到本地
創(chuàng)建MySQL數(shù)據(jù)庫(kù)(如數(shù)據(jù)庫(kù)名oauth2), 并運(yùn)行相應(yīng)的SQL腳本(腳本文件位于others/database目錄),
運(yùn)行腳本的順序: initial_db.ddl -> oauth.ddl -> initial_data.ddl修改spring-oauth-server.properties(位于src/resources目錄)中的數(shù)據(jù)庫(kù)連接信息(包括username, password等)
將本地項(xiàng)目導(dǎo)入到IDE(如Intellij IDEA)中,配置Tomcat(或類似的servelt運(yùn)行服務(wù)器), 并啟動(dòng)Tomcat(默認(rèn)端口為8080)
另: 也可通過(guò)maven package命令將項(xiàng)目編譯為war文件(spring-oauth-server.war), 將war放在Tomcat中并啟動(dòng)(注意: 這種方式需要將spring-oauth-server.properties加入到classpath中并正確配置數(shù)據(jù)庫(kù)連接信息).參考oauth_test.txt(位于others目錄)的內(nèi)容并測(cè)試之(也可在瀏覽器中訪問(wèn)相應(yīng)的地址,如: http://localhost:8080/spring-oauth-server).
幫助與改進(jìn)
與該項(xiàng)目相關(guān)的博客請(qǐng)?jiān)L問(wèn) http://blog.csdn.net/monkeyking1987/article/details/16828059
如果在使用過(guò)程中遇到特殊的問(wèn)題(如:如何將oauth_code存入數(shù)據(jù)庫(kù)),請(qǐng)?jiān)L問(wèn)項(xiàng)目的 Wiki 與 附件.
我會(huì)把大家反饋的問(wèn)題解決辦法添加在這里.
若在這兩個(gè)地方?jīng)]有找到解決辦法的, 歡迎發(fā)郵件到[email protected]一起討論.如果在使用項(xiàng)目的過(guò)程中發(fā)現(xiàn)任何的BUG或者更好的提議, 建議將其提交到項(xiàng)目的 Issues 中, 我會(huì)一直關(guān)注并不斷改進(jìn)項(xiàng)目.
功能擴(kuò)展
oauth_code存入數(shù)據(jù)庫(kù)的配置, 請(qǐng)下載文件 oauth_code存入數(shù)據(jù)庫(kù)的配置.jpg改變token過(guò)期的時(shí)間的配置, 請(qǐng)下載文件改變token過(guò)期的時(shí)間的配置.jpg自定義 grant_type, 默認(rèn)情況支持的grant_type包括 [password,authorization_code,refresh_token,implicit], 若不需要其中的某些grant_type, 則可以修改 oauth_client_details 表中的 authorized_grant_types 字段的值;
若想把整個(gè)Oauth服務(wù)修改來(lái)只支持某些grant_type, 請(qǐng)修改 security.xml文件中的 oauth2:authorization-server 中的內(nèi)容,將對(duì)應(yīng)的 grant_type 注釋或刪掉即可-
如何刷新access_token(refresh_token), 在通過(guò)客戶端(如移動(dòng)設(shè)備)登錄成功后返回的數(shù)據(jù)如下{"access_token":"3420d0e0-ed77-45e1-8370-2b55af0a62e8","token_type":"bearer","refresh_token":"b36f4978-a172-4aa8-af89-60f58abe3ba1","expires_in":43199,"scope":"read write"}
若需要刷新獲取新的token(一般在 expires_in 有效期時(shí)間快到時(shí)), 請(qǐng)求的URL類似如下
http://localhost:8080/oauth/token?client_id=mobile-client&client_secret=mobile&grant_type=refresh_token&refresh_token=b36f4978-a172-4aa8-af89-60f58abe3ba1
注意: refresh_token 參數(shù)值必須與登錄成功后獲取的 refresh_token 一致, 且grant_type = refresh_token
另: 刷新token 需要 ClientDetails 支持 refresh_token 類型的 grant_type (默認(rèn)是支持的)
更多資源
以下是在學(xué)習(xí)工作中收集的更多關(guān)于Oauth的資源,對(duì)深入理解與運(yùn)用Oauth有幫助
OAUTH2核心參數(shù)說(shuō)明, 重點(diǎn)介紹了grant_type 與 response_type 以及示例
OAuth2 flows, 詳細(xì)介紹Oauth2的流程,各類錯(cuò)誤發(fā)生時(shí)的響應(yīng)
OAuth 2 開(kāi)發(fā)人員指南(Spring security oauth2), 翻譯OAuth 2 Developers Guide(spring security oauth2)
