目前不少開放平臺如新浪微博開放平臺都在使用提供開放API接口供開發者使用,隨之帶來了第三方應用要到開放平臺進行受權的問題,OAuth就是幹這個的,OAuth2是OAuth協議的下一個版本,相比OAuth1,OAuth2整個受權流程更簡單安全了,但不兼容OAuth1,具體能夠到OAuth2官網http://oauth.net/2/查看,OAuth2協議規範能夠參考http://tools.ietf.org/html/rfc6749。目前有好多參考實現供選擇,能夠到其官網查看下載。html
本文使用Apache Oltu,其以前的名字叫Apache Amber ,是Java版的參考實現。使用文檔可參考https://cwiki.apache.org/confluence/display/OLTU/Documentation。apache
OAuth角色安全
資源擁有者(resource owner):能受權訪問受保護資源的一個實體,能夠是一我的,那咱們稱之爲最終用戶;如新浪微博用戶zhangsan;服務器
資源服務器(resource server):存儲受保護資源,客戶端經過access token請求資源,資源服務器響應受保護資源給客戶端;存儲着用戶zhangsan的微博等信息。.net
受權服務器(authorization server):成功驗證資源擁有者並獲取受權以後,受權服務器頒發受權令牌(Access Token)給客戶端。server
客戶端(client):如新浪微博客戶端weico、微格等第三方應用,也能夠是它本身的官方應用;其自己不存儲資源,而是資源擁有者受權經過後,使用它的受權(受權令牌)訪問受保護資源,而後客戶端把相應的數據展現出來/提交到服務器。「客戶端」術語不表明任何特定實現(如應用運行在一臺服務器、桌面、手機或其餘設備)。 htm
一、客戶端從資源擁有者那請求受權。受權請求能夠直接發給資源擁有者,或間接的經過受權服務器這種中介,後者更可取。token
二、客戶端收到一個受權許可,表明資源服務器提供的受權。接口
三、客戶端使用它本身的私有證書及受權許可到受權服務器驗證。資源
四、若是驗證成功,則下發一個訪問令牌。
五、客戶端使用訪問令牌向資源服務器請求受保護資源。
六、資源服務器會驗證訪問令牌的有效性,若是成功則下發受保護資源。
更多流程的解釋請參考OAuth2的協議規範http://tools.ietf.org/html/rfc6749。