在一些大型互聯網公司,隨着公司的業務發展逐漸龐大,須要和外部合夥夥伴進行合做,須要將公司的接口開放給外部其餘合夥夥伴進行調用。git
好比騰訊的 QQ互聯網、微信開放平臺、螞蟻金服開放平臺 、釘釘開放平臺、微博開放平臺,好比實現功能QQ聯合登錄、微信掃碼登錄好比騰訊的QQ互聯網、微信開放平臺、螞蟻金服開放平臺 、微博開放平臺,好比實現功能QQ聯合登錄、微信掃碼登錄。web
還有就是在大型集團公司中,分爲總公司,和旗下多個分公司,總公司與分公司相互通信也能夠採用開放平臺形式對接口進行受權。spring
OAuth: OAuth(開放受權)是一個開放標準,容許用戶受權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不須要將用戶名和密碼提供給第三方網站或分享他們數據的全部內容。安全
QQ登陸OAuth2.0:對於用戶相關的OpenAPI(例如獲取用戶信息,動態同步,照片,日誌,分享等),爲了保護用戶數據的安全和隱私,第三方網站訪問用戶數據前都須要顯式的向用戶徵求受權。
QQ登陸OAuth2.0採用OAuth2.0標準協議來進行用戶身份驗證和獲取用戶受權,相對於之前的 OAuth1.0協議,其認證流程更簡單和安全。springboot
在開放平臺接口設計中,遵循Oauth2.0認證受權協議 JWT。微信
QQ受權用到的字段屬性介紹:app
appid:應用的惟一標識。在OAuth2.0認證過程當中,appid的值即爲oauth_consumer_key的值。商戶號 永久不能進行修改的,就像咱們的身份證號同樣。微服務
appkey:appid對應的密鑰,訪問用戶資源時用來驗證應用的合法性。在OAuth2.0認證過程當中,appkey的值即爲oauth_consumer_secret的值。商戶密鑰 這個能夠進行修改,可是應該注意修改過以後進行同步的問題。網站
受權碼Code:獲取accessToken。spa
accessToken:調用接口權限訪問令牌。
回調地址:受權成功以後,重定向的地址。
openId:開放平臺生產惟一的用戶Id。
OAuth認證和受權的過程以下:
一、用戶訪問第三方網站網站,想對用戶存放在服務商的某些資源進行操做。
二、第三方網站向服務商請求一個臨時令牌。
三、服務商驗證第三方網站的身份後,授予一個臨時令牌。
四、第三方網站得到臨時令牌後,將用戶導向至服務商的受權頁面請求用戶受權,而後這個過程當中將臨時令牌和第三方網站的返回地址發送給服務商。
五、用戶在服務商的受權頁面上輸入本身的用戶名和密碼,受權第三方網站訪問所相應的資源。
六、受權成功後,服務商將用戶導向第三方網站的返回地址。
七、第三方網站根據臨時令牌從服務商那裏獲取訪問令牌。
八、服務商根據令牌和用戶的受權狀況授予第三方網站訪問令牌。
九、第三方網站使用獲取到的訪問令牌訪問存放在服務商的對應的用戶資源。
一、 生成受權Code連接,獲取受權碼
二、 根據用戶獲取的受權碼,獲取對應的AccessToken
三、 根據AccessToken獲取對應的openId
四、 根據openId獲取對應的用戶信息
在Spring Cloud須要使用oauth2來實現多個微服務的統一認證受權,經過向OAUTH服務發送某個類型的grant type進行集中認證和受權,從而得到access_token,而這個token是受其餘微服務信任的,咱們在後續的訪問能夠經過access_token來進行,從而實現了微服務的統一認證受權。
客戶端根據約定的ClientID、ClientSecret、Scope來從Access Token URL地址獲取AccessToken,並通過AuthURL認證,用獲得的AccessToken來訪問其餘資源接口。
Spring Cloud oauth2 須要依賴Spring security
一、Resource Server:被受權訪問的資源
二、Authotization Server:OAuth認證受權中心
三、Resource Owner: 用戶
四、Client:使用API的客戶端(如Android 、IOS、web app)
一、受權碼模式(authorization code)用在客戶端與服務端應用之間受權,作受權使用。
二、簡化模式(implicit)用在移動app或者web app(這些app是在用戶的設備上的,如 在手機上調起微信來進行認證受權)
三、密碼模式(resource owner password credentials)應用直接都是受信任的(都是由一家公司開發的),使用密碼進行驗證登陸的。
四、客戶端模式(client credentials)用在應用API訪問
QQ開放平臺地址:http://wiki.connect.qq.com/