基於 Oauth 2.0 的第三方帳號登陸實現

基於 Oauth 2.0 的第三方帳號登陸實現
Oauth 2.0 原理與受權流程php

1.剛開始的第三方應用接入其餘帳號登陸過程: 數據庫


存在問題:api

1.用戶帳號、密碼信息透露給了第三方應用,致使安全問題
2.用戶要回收受權,只能經過修改密碼來實現,此時若是有多個第三方應該,全部受權一塊兒被回收
3.很難安全的實現對不一樣的第三方應用給予不用的權限
2.使用oauth改進的原理: 安全

3.使用oauth實現的具體流程: session

3個關鍵過程:app

1.用戶在服務商受權頁完成受權,得到code
2.第三方應用取得code後訪問服務商應用,得到access_token
3.第三方應用以access_token爲憑證到服務商獲取資源
百度平臺受權流程及接口調用測試

1.流程網站

註冊一個平臺帳號
申請成爲開發者
建立網站接入類型應用(得到apiKey,secretKey等信息)
設置回調URL(得到回調地址redirect uri信息)
開發、測試
註冊一個平臺帳號:ui

註冊地址:https://developer.baidu.com/
登陸後,註冊成爲開發者:http://developer.baidu.com/user/reg
註冊成功後,查看開發者信息:http://developer.baidu.com/user/info
建立應用:能夠獲得apiKey和secretKey等信息
設置回調的url:在「安全設置」裏面設置,填寫「受權回調頁」例如:http://localhost:8080/third_login/baidu
查看oauth2.0:「受權應用場景」:http://developer.baidu.com/wiki/index.php?title=docs/oauth/application
Server端使用百度OAuth2.0受權調用開放API流程url

引導用戶到以下地址進行受權: http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

若是用戶贊成受權,頁面跳轉至 YOUR_REGISTERED_REDIRECT_URI/?code=CODE 。

換取Access Token。 https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=CODE&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

code: 是受權成功後跳轉到redirect_uri後面帶的code
client_id: 是apiKey
client_secret:是secretKey
redirect_uri:是回調的url
測試用例

去到百度帳號受權頁 http://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=AXg9Q2CuGLrHbGa2k7pQEehz&redirect_uri=http://localhost:8080/third_login/baidu

登陸帳號,點擊受權,發生回調(獲得code) http://localhost:8080/third_login/baidu?code=d809260c20846af155b5cb2eb9973ea4

換取access_token(注意:這裏的連接不要出現空格,不然訪問報錯) https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=d809260c20846af155b5cb2eb9973ea4&client_id=AXg9Q2CuGLrHbGa2k7pQEehz&client_secret=BymTr6GcxTNPexGZsrCmZ5MoHRU5heoE&redirect_uri=http://localhost:8080/third_login/baidu

返回結果: { "expires_in": 2592000, "refresh_token": "22.3fcc01b887492aa1776c64d22c5a4848.315360000.1865835419.2956862442-15580017", "access_token": "21.90c30aff2eff3cffa42b49c152e9feae.2592000.1553067419.2956862442-15580017", "session_secret": "b4a40269b5b1e7951d704bf5ff917d9e", "session_key": "9mnRfQpMu/CXDG0NYlKZmj5DgbjYnUZHeePW5Z7chFc+/PFjB7Cv3MiS12m7iz8AP4SrYgz2HhwWNeC9/yFmy51Xu7sLiW9qZLg=", "scope": "basic" } 獲取當前登陸用戶的簡單信息 https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser?access_token=21.90c30aff2eff3cffa42b49c152e9feae.2592000.1553067419.2956862442-15580017 返回結果: { "uid": "2956862442",  (這個能夠保存到數據庫中作邏輯登陸) "uname": "幸運的深仔", "portrait": "6db0e5b9b8e8bf90e79a84e6b7b1e4bb94353a" } 獲取大小圖像 (根據portrait獲取)http://tb.himg.baidu.com/sys/portraitn/item/${portrait} small image: http://tb.himg.baidu.com/sys/portraitn/item/6db0e5b9b8e8bf90e79a84e6b7b1e4bb94353a large image: http://tb.himg.baidu.com/sys/portrait/item/6db0e5b9b8e8bf90e79a84e6b7b1e4bb94353a  

相關文章
相關標籤/搜索