django微博第三方登入原理
阿新 • • 發佈:2020-10-09
目錄
微博第三方登入講解
1.微博第三方登入流程
// 生成的url https://api.weibo.com/oauth2/authorize? client_id=4122644977 &response_type=code &state=study &forcelogin=true &redirect_uri=https%3A%2F%2Fstudy.163.com%2Fsns%2Fweibo%2FoAuthCallback.htm%3FoauthType%3Dlogin%26returnUrl%3DaHR0cHM6Ly9zdHVkeS4xNjMuY29tL3Byb3ZpZGVyLzQwMDAwMDAwMDQ3ODAxMi9pbmRleC5odG0%2FZnJvbT1zdHVkeQ%3D%3D%26nrsstcw%3Dfalse%26nc%3Dtrue###https://study.163.com/provider/400000000478012/index.htm?from=study
1.1.前端獲取url通過url獲取認證code.
- 1.1在vue載入是傳送請求獲取微博授權url
- django收到請求後,通過微博應用ID(client_id)和回撥地址(redirect_uri)動態生成授權url返回給Vue
- 當用戶點選上面的url進行掃碼,授權成功會跳轉我們的回撥介面並附加code引數
- vue獲取微博返回的code後,會將code放鬆給django後端(上面的redirect_url)
1.2.獲取微博access_token
- 後端獲取code後結合client_id, client_secret, redirect_url引數進行傳遞,獲取微博access_token
1.3.獲取微博使用者基本資訊儲存到資料庫
- 使用獲得到的access_token呼叫獲取使用者基本資訊的介面,獲取使用者第三方平臺的基本資訊儲存到資料庫,關聯本地使用者,然後將使用者資訊返回給前端
1.4. 生成token給vue
- django後端藉助微博認證成功後,可以使用JWT生成token,返回給Vue
- Vue將token儲存到localStorage中,以便使用者訪問其他頁面進行身份驗證
2.第三方登入與本地登入的關聯(三種情況)
2.1情況1:本地未登入,第一次登入第三方
此時相當與註冊,直接把第三方資訊拉過來註冊成本地使用者就可以了,並建立本地使用者與第三方使用者(openid)的繫結關係
2.2情況2:本地未登入,再次登入第三方
此時使用者已註冊,獲取到openid後直接找到對應的本地使用者即可
2.3 情況3:本地登入,並繫結第三方
這個只要將獲取到的openid繫結到本地使用者就可以了
3.oauth認證原理
- OAuth是一個開放標準,允許使用者讓第三方應用訪問該使用者在某以網站上儲存的私密的資源而無需將使用者名稱和密碼提供給第三方應用。
- OAuth允許使用者提供一個令牌,而不是使用者名稱和密碼來訪問他們存放在特定服務提供者的資料
- 這個code如果能到三方換取到資料就證明這個使用者是三方真是使用者
4.為什麼使用第三方登入
- 服務方希望使用者註冊,而使用者懶得填註冊時的各種資訊(主要是為了保證使用者的唯一性,各種使用者名稱已佔用,密碼格式限制)
- 而像微信,QQ,微博等幾乎每個人都會安裝的應用中使用者肯定會在其中一個應用中已經註冊過,證明使用者在已經註冊中的唯一性
- 第三方登入的實質就是在授權時獲取第三方應用提供的代表使用者在第三方應用中的唯一性的openid並將openid儲存在第三放服務控制的本地儲存