什么是開放平台接口
在一些大型互聯網公司,隨着公司的業務發展逐漸龐大,需要和外部合伙伙伴進行合作,需要將公司的接口開放給外部其他合伙伙伴進行調用。
比如騰訊的 QQ互聯網、微信開放平台、螞蟻金服開放平台 、釘釘開放平台、微博開放平台,比如實現功能QQ聯合登陸、微信掃碼登陸比如騰訊的QQ互聯網、微信開放平台、螞蟻金服開放平台 、微博開放平台,比如實現功能QQ聯合登陸、微信掃碼登陸。
還有就是在大型集團公司中,分為總公司,和旗下多個分公司,總公司與分公司相互通訊也可以采用開放平台形式對接口進行授權。
什么是Oauth2.0
OAuth: OAuth(開放授權)是一個開放標准,允許用戶授權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不需要將用戶名和密碼提供給第三方網站或分享他們數據的所有內容。
QQ登錄OAuth2.0:對於用戶相關的OpenAPI(例如獲取用戶信息,動態同步,照片,日志,分享等),為了保護用戶數據的安全和隱私,第三方網站訪問用戶數據前都需要顯式的向用戶征求授權。
QQ登錄OAuth2.0采用OAuth2.0標准協議來進行用戶身份驗證和獲取用戶授權,相對於之前的 OAuth1.0協議,其認證流程更簡單和安全。
在開放平台接口設計中,遵循Oauth2.0認證授權協議 JWT。
QQ授權用到的字段屬性介紹:
appid:應用的唯一標識。在OAuth2.0認證過程中,appid的值即為oauth_consumer_key的值。商戶號 永久不能進行修改的,就像我們的身份證號一樣。
appkey:appid對應的密鑰,訪問用戶資源時用來驗證應用的合法性。在OAuth2.0認證過程中,appkey的值即為oauth_consumer_secret的值。商戶密鑰 這個可以進行修改,但是應該注意修改過之后進行同步的問題。
授權碼Code:獲取accessToken。
accessToken:調用接口權限訪問令牌。
回調地址:授權成功之后,重定向的地址。
openId:開放平台生產唯一的用戶Id。
Oauth2授權原理
OAuth認證和授權的過程如下:
1、用戶訪問第三方網站網站,想對用戶存放在服務商的某些資源進行操作。
2、第三方網站向服務商請求一個臨時令牌。
3、服務商驗證第三方網站的身份后,授予一個臨時令牌。
4、第三方網站獲得臨時令牌后,將用戶導向至服務商的授權頁面請求用戶授權,然后這個過程中將臨時令牌和第三方網站的返回地址發送給服務商。
5、用戶在服務商的授權頁面上輸入自己的用戶名和密碼,授權第三方網站訪問所相應的資源。
6、授權成功后,服務商將用戶導向第三方網站的返回地址。
7、第三方網站根據臨時令牌從服務商那里獲取訪問令牌。
8、服務商根據令牌和用戶的授權情況授予第三方網站訪問令牌。
9、第三方網站使用獲取到的訪問令牌訪問存放在服務商的對應的用戶資源。
QQ聯合登錄的流程
1、 生成授權Code鏈接,獲取授權碼
2、 根據用戶獲取的授權碼,獲取對應的AccessToken
3、 根據AccessToken獲取對應的openId
4、 根據openId獲取對應的用戶信息
SpringCloud Oauth2
在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
Oauth2角色划分
1、Resource Server:被授權訪問的資源
2、Authotization Server:OAuth認證授權中心
3、Resource Owner: 用戶
4、Client:使用API的客戶端(如Android 、IOS、web app)
OAuth2四種授權方式
1、授權碼模式(authorization code)用在客戶端與服務端應用之間授權,做授權使用。
2、簡化模式(implicit)用在移動app或者web app(這些app是在用戶的設備上的,如 在手機上調起微信來進行認證授權)
3、密碼模式(resource owner password credentials)應用直接都是受信任的(都是由一家公司開發的),使用密碼進行驗證登錄的。
4、客戶端模式(client credentials)用在應用API訪問
項目整合授權認認證中心程圖
QQ開放平台地址:http://wiki.connect.qq.com/