<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          掃碼登錄的典型流程圖

          共 3033字,需瀏覽 7分鐘

           ·

          2022-08-25 22:36

          關(guān)于掃碼登錄,之前寫過幾篇文章以及發(fā)過相關(guān)的視頻。


          基于 keycloak 的關(guān)注公眾號即登錄功能的設(shè)計與實現(xiàn)
          基于 Java Spring Security 的關(guān)注微信公眾號即登錄的設(shè)計與實現(xiàn)
          掃二維碼登錄一定安全嗎?

          今天再以知乎的掃碼登錄為例,畫一個完整的流程圖,供參考。


          整體流程
          以下是一個正常掃碼并登錄的時序圖。


          圖片源碼如下:

          @startuml
          autonumber
          actor "用戶" as Userparticipant "瀏覽器" as Browserparticipant "手機(jī)端" as Mobileparticipant "服務(wù)端" as Server #orange
          activate User
          User -> Browser: 輸入 URLactivate Browser
          Browser -> Server: 請求 csrf tokenactivate Server
          Server -> Browser: 返回 csrf tokendeactivate Server

          Browser -> Server: 帶上 csrf token 請求生成二維碼
          activate Server
          Browser -> Server: 開始輪詢二維碼的狀態(tài)
          Server -> Server: 生成二維碼note right of Server: 并記錄該二維碼的狀態(tài)是等待掃描
          Server -> Browser: 返回待掃描
          Server -> Browser: 返回二維碼deactivate Server
          Browser --> User
          User -> Mobile: 進(jìn)入 APP,點擊掃碼activate MobileMobile -> Server: 通知已掃描activate ServerServer -> Server: 更新二維碼狀態(tài)為已掃描deactivate ServerMobile -> Mobile: 展示確認(rèn)登錄頁面Mobile --> Userdeactivate Mobile
          Browser -> Server: 輪詢二維碼狀態(tài)activate ServerServer -> Browser: 返回已掃描,等待確認(rèn)Browser -> Browser: 更新 UI,顯示已掃描Browser --> Userdeactivate Server
          User -> Mobile: 點擊確認(rèn)登錄activate Mobileactivate ServerMobile -> Server: 通知二維碼的狀態(tài)為已確認(rèn)Server -> Mobile: 通知用戶已登錄deactivate MobileServer -> Server: 更新二維碼的狀態(tài)為已確認(rèn)deactivate Server
          Browser -> Server : 輪詢二維碼狀態(tài)activate ServerServer -> Browser: 返回已確認(rèn),并帶上用戶登錄 cookieBrowser -> Browser: 更新 cookieBrowser -> Server: 使用 cookie 請求用戶信息Server -> Browser: 返回用戶信息Browser -> Browser: 存儲用戶信息到 local storageBrowser --> User: 展示用戶登錄態(tài)頁面
          @enduml


          如果在展示二維碼后不掃描,或者掃描后用戶不確認(rèn)登錄,等待一段時間后(比如一分鐘),瀏覽器輪詢二維碼狀態(tài)時,服務(wù)器端都返回超時即可。

          超時情況

          以下是用戶掃碼后不點擊確認(rèn)的超時流程圖,對于不掃描的超時流程圖,會更簡單一點,略過不畫。

          圖片源碼如下:

          @startuml
          autonumber
          actor "用戶" as Userparticipant "瀏覽器" as Browserparticipant "手機(jī)端" as Mobileparticipant "服務(wù)端" as Server #orange
          activate User
          User -> Browser: 輸入 URLactivate Browser
          Browser -> Server: 請求 csrf tokenactivate Server
          Server -> Browser: 返回 csrf tokendeactivate Server

          Browser -> Server: 帶上 csrf token 請求生成二維碼
          activate Server
          Browser -> Server: 開始輪詢二維碼的狀態(tài)
          Server -> Server: 生成二維碼note right of Server: 并記錄該二維碼的狀態(tài)是等待掃描
          Server -> Browser: 返回待掃描
          Server -> Browser: 返回二維碼deactivate Server
          Browser --> User
          User -> Mobile: 進(jìn)入 APP,點擊掃碼activate MobileMobile -> Server: 通知已掃描activate ServerServer -> Server: 更新二維碼狀態(tài)為已掃描deactivate ServerMobile -> Mobile: 展示確認(rèn)登錄頁面Mobile --> Userdeactivate Mobile
          Browser -> Server: 輪詢二維碼狀態(tài)activate ServerServer -> Browser: 返回已掃描,等待確認(rèn)Browser -> Browser: 更新 UI,顯示已掃描Browser --> Userdeactivate Server
          deactivate User
          Browser -> Server: 輪詢二維碼狀態(tài)activate ServerServer -> Browser: 返回已掃描,待確認(rèn)deactivate Serverdeactivate Browser...
          Server -> Server: 超時,更新二維碼狀態(tài)為超時
          Browser -> Server: 輪詢二維碼狀態(tài)activate Browseractivate ServerServer -> Browser: 返回已超時Browser -> Browser: 進(jìn)入刷新二維碼流程@enduml



          服務(wù)器端的二維碼狀態(tài)流轉(zhuǎn)圖

          二維碼的生命周期圖:

          圖片源碼如下:


          @startuml
          [*] --> 已生成已生成 --> 已超時 : 超時未掃碼已生成 : 等待用戶掃碼
          已生成 -> 已掃碼 : 用戶掃碼已掃碼 : 等待用戶點擊確認(rèn)
          已掃碼 -> 已確認(rèn): 用戶點擊確認(rèn)已確認(rèn) : 創(chuàng)建 session,進(jìn)入登錄態(tài)
          已掃碼 --> 已超時: 超時未確認(rèn)
          已確認(rèn) -> [*] : 服務(wù)器端可以刪除二維碼狀態(tài)存儲了已超時 -> [*] : 服務(wù)器端可以刪除二維碼狀態(tài)存儲了
          @enduml


          若有收獲,就點個贊吧




          瀏覽 99
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜芽AV久久 | 性爱激情五月 | 日日大香蕉 | 精品亚洲中文字幕 | 久久草国产|