Spring Cloud 微服務開放平臺接口

github源碼地址:
https://github.com/spring-cloud/spring-cloud-securitygit

前言:

什麼是開放平臺接口github

場景 :

 總公司與子公司 對接接口  還有一些合做夥伴spring

 總公司 提供接口  一、可以獲取到哪一個子公司調用   二、受權機制,可以靈活控制接口調用權限。阿里和順豐鬧矛盾,順豐把權限修改阿里巴巴就不能調用接口。數據庫

 不少公司都有開放平臺接口能夠供咱們練習使用的哈哈:好比騰訊的QQ互聯網、微信開放平臺、螞蟻金服開放平臺 、微博開放平臺,好比實現功能QQ聯合登錄、微信掃碼登錄。都提供了相應的開放平臺。api

 

訪問:https://github.com/spring-cloud/spring-cloud-security   源碼中有這個組件  幫助快速搭建開放平臺   實現受權流程安全

 

OAuth: OAuth(開放受權)是一個開放標準,容許用戶受權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不須要將用戶名和密碼提供給第三方網站或分享他們數據的全部內容。
QQ登陸OAuth2.0:對於用戶相關的OpenAPI(例如獲取用戶信息,動態同步,照片,日誌,分享等),爲了保護用戶數據的安全和隱私,第三方網站訪問用戶數據前都須要顯式的向用戶徵求受權。
QQ登陸OAuth2.0採用OAuth2.0標準協議來進行用戶身份驗證和獲取用戶受權,相對於以前的OAuth1.0協議,其認證流程更簡單和安全。微信

注意使用這個框架時候,表名不要隨便改!底層都是寫好了的昂! app

咱們本身作完開放平臺api接口,配備的還要有文檔,咱們本身整合swagger就OK了。框架

 

經常使用開放平臺

QQ互聯網開放平臺微服務

http://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0

 

什麼是Oauth2

  在開放平臺接口設計中,遵循Oauth2.0協,認證受權協議(JWT)

  在微服務裏面,Oauth2 有密碼模式 受權碼模式

 

 認證受權協議,其實都是用連接,點解時候發起受權。好比點擊登陸,點擊了一個鏈接進行受權。

 

 

小結:

OAuth: OAuth(開放受權)是一個開放標準,容許用戶受權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不須要將用戶名和密碼提供給第三方網站或分享他們數據的全部內容
QQ登陸OAuth2.0:對於用戶相關的OpenAPI(例如獲取用戶信息,動態同步,照片,日誌,分享等),爲了保護用戶數據的安全和隱私,第三方網站訪問用戶數據前都須要顯式的向用戶徵求受權。
QQ登陸OAuth2.0:採用OAuth2.0標準協議來進行用戶身份驗證和獲取用戶受權,相對於以前的OAuth1.0協議,其認證流程更簡單和安全。

 

概念:

           appId              (商戶號,給子公司或者合做商戶提供的)+ appKey(密鑰,驗證密鑰)  (這倆配套的 都是必備的,而且appID永久不能改,appKey能夠改)

           accessToken   調用接口權限訪問令牌

           回調地址           受權成功 重定向地址 保證安全性 不要隨便拼接成別的地址了

          Authorization code       經過受權碼獲取accessToken 

          openId              開放平臺生成惟一的id  

 

體驗下開放平臺——調用QQ互聯網接口的大致流程

一、 生成受權連接,獲取受權碼

       生成受權鏈接: 我截了個網易雲音樂的圖

點擊以後:

用戶點擊以後,纔會獲取受權碼

  注意這個鏈接的 client_id 就是  appId  (商戶號,給子公司或者合做商戶提供的, 第三方須要的)

  state是防止csrf攻擊的,隨機生成的

 PS:若是咱們本身設計的話,重要表結構: 回調地址的做用:以鏈接形式跳轉到騰訊獲取受權碼,用戶受權成功以後,跳轉到回調地址redirect_uri回調地址(咱們自定義的地址)

   

  上面的那個鏈接是網易本身封裝的,我隨便截的圖,咱們開發時候本身封裝鏈接,在咱們本身的網站上面,點擊這個鏈接,而後會跳轉到騰訊那邊

  https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://toov5.fuck.com/qqLoginBack       咱們本身拼接的

  點擊後:

  會調用:http://toov5.fuck.com/qqLoginBack?code=23EDESD2346FSDFNWE436346&state=99              

二、 使用受權碼獲取AccessToken 

    獲取到受權碼以後,表明登陸成功了,可是不表明合做夥伴已經對接成功。   受權碼獲取accessToken,而後再去獲取openId,而後再去數據庫查詢關聯的openId。有的話直接登陸,沒有就須要關聯之

    令牌的做用,就是臨時的效果做用(10分鐘)。

    https://graph.qq.com/oauth2.0/token?        grant_type=authorization_code&client_id=101462456&client_secret=23EDESD2346FSDFNWE436346&code=23EDESD2346FSDFNWE436346 &  redirect_uri=http://mayikt.s1.natapp.cc/qqLoginBack

                                                               受權類型                                                                                  密鑰      配置好的appKey                               受權碼    返回的 Authorization code    :                                    回調地址 

   在Spring Cloud裏面流程底層已經幫助實現了哈 只要關注表接口就OK了

   經過訪問這個地址就會獲取到 accessToken!! 拿到accessToken就能夠調用接口了! (父公司能夠經過 accessToken 逆向出 誰在調用個人接口。 在表裏面accessToken和openId是關聯的(每一個合做的網站www.toov5.com是惟一的,一個域名一個openid的))、

 表結構:

 

三、 使用AccessToken獲取openId

    經過accessToken以後,進而獲取用戶openId 

    自我拼接開發:

    https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E

   訪問後:

  

   獲取到 openId就能夠獲取到用戶相關信息了,受權碼只能用一次! 受權了一段時間後就銷燬了。須要從新受權哈

   

四、 使用openId獲取用戶信息

  https://graph.qq.com/user/get_user_info?access_token=B2FD1997D149313F16C93D91C75AC75E&oauth_consumer_key=101462456&openid=4B1717CBBFE1E900D2A1482C4A18B3BD

                                                                       accessToken                                                                                  appId                                         openId     

  此時會返回各類用戶信息的~ 包括頭像 圖片之類的 性別 地址等等

 

  注: 數據庫中 user 表 新增一個字段 qq_pen_id 字段

 

 

 


 

總結:        

 注: QQ聯合登陸基於Oauth2.0實現的

認證受權協議: 經過鏈接進行受權

一、生成Code鏈接  後去受權碼  (用戶點擊)

二、使用用戶獲取的受權碼,獲取對應的accessToken (臨時的效果做用)

三、使用accessToken獲取用戶openId(調用第三方接口)

四、使用penId獲取用戶信息

 

訪問這個鏈接 會讀取qq信息,哪一個帳戶在登陸

點擊肯定 跳轉到回調的url中 而且攜帶者code

 

示例:

一、生成受權CODE連接,獲取受權碼 ----用戶點擊

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101462456&state=888&redirect_uri=http://toov5.s1.natapp.cc/qqLoginBack

二、使用用戶獲取的受權碼,獲取對應的accessToken

https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&client_id=101462456&client_secret=4488033be77331e7cdcaed8ceadc10d5&code=E91DF5B0E2455A6B2AF25CD9FA1C7582&
redirect_uri=http://toov5.s1.natapp.cc/qqLoginBack

三、使用accessToken獲取用戶openid

https://graph.qq.com/oauth2.0/me?access_token=B2FD1997D149313F16C93D91C75AC75E
四、使用openid獲取用戶信息

https://graph.qq.com/user/get_user_info?access_token=B2FD1997D149313F16C93D91C75AC75E&oauth_consumer_key=101462456&openid=4B1717CBBFE1E900D2A1482C4A18B3BD

 

 

Oauth2受權原理

OAuth認證和受權的過程以下:
一、用戶訪問第三方網站網站(自公司),想對用戶存放在服務商的某些資源進行操做。
二、第三方網站(自公司)向服務商(父公司)請求一個臨時令牌。
三、服務商驗證第三方網站的身份後,授予一個臨時令牌。
四、第三方網站得到臨時令牌後,將用戶導向至服務商的受權頁面請求用戶受權,而後這個過程當中將臨時令牌和第三方網站的返回地址發送給服務商。
五、用戶在服務商的受權頁面上輸入本身的用戶名和密碼,受權第三方網站訪問所相應的資源。
六、受權成功後,服務商將用戶導向第三方網站的返回地址。
七、第三方網站根據臨時令牌從服務商那裏獲取訪問令牌。
八、服務商根據令牌和用戶的受權狀況授予第三方網站訪問令牌。
九、第三方網站使用獲取到的訪問令牌訪問存放在服務商的對應的用戶資源。

 

 

獲取accessToken時候須要client_id 和client_client_secret

openId 獲取用戶信息 每一個合夥網站保證惟一

www.toov5.com   這個域名的openId 惟一

相關文章
相關標籤/搜索