基於DID實現第三方應用的分佈式身份登錄

在我們掌握了DID的基礎知識(還沒有掌握DID基礎知識?請先閱讀我之前的關於DID的文章),構建DID平臺的時候,DID的常見應用就是基於DID實現第三方平臺的登錄。接下來,我們假設已經構建了一個基礎的DID平臺,用長安鏈實現了DID文檔的鏈上管理,並提供了DID錢包託管用戶的公私鑰和VC證書,建設全新的第三方系統實現DID登錄。

前置條件

我們已經建設了一個DID分佈式身份的應用,爲每個用戶頒發了DID,對應的DID文檔也上到了一條區塊鏈(比如長安鏈)上。每個用戶有自己的DID錢包(可以是瀏覽器插件錢包,也可以是手機APP錢包),在DID錢包中保存了用戶的公私鑰、DID和各種頒發的證書VC信息。

場景1:DID登錄

需求

現在我們要建一個新的服務系統,並希望使用DID進行登錄,類似於網上的使用Google賬號登錄或者微信掃碼登錄這樣的OAuth登錄,只要是在長安鏈上有頒發了身份的用戶,都可以通過其DID錢包進行登錄。

技術實現

以下是一個簡化版的DID錢包登錄流程,並以瀏覽器插件錢包爲例:

1.用戶在第三方應用上發起登錄請求。
2.第三方應用後端生成一個隨機數(nonce)併發送給錢包瀏覽器插件。
3.錢包瀏覽器插件使用用戶的DID私鑰對隨機數進行簽名,並將簽名和用戶的DID一起發送給第三方應用後端。
4.第三方應用後端將簽名和DID發送給DID合約進行驗證。
5.DID合約查詢區塊鏈上的DID文檔,獲取DID的公鑰,並使用公鑰驗證簽名。如果驗證成功,返回用戶的身份信息給第三方應用後端。
6.第三方應用後端根據返回的身份信息,完成用戶的登錄或註冊操作,並返回登錄結果給用戶。

以下是對應的時序圖:

sequenceDiagram 用戶->>應用前端: 發起登錄請求 應用前端->>應用後端: 請求隨機數(nonce) 應用後端->>應用前端: 返回隨機數(nonce) 應用前端->>錢包插件: 發送隨機數(nonce) 用戶->>錢包插件: 用DID私鑰簽名nonce 錢包插件->>應用前端: 發送簽名和用戶DID 應用前端->>應用後端: 請求驗證簽名和用戶DID 應用後端->>DID合約: 發送簽名和用戶DID進行驗證 DID合約->>應用後端: 查詢鏈上DID文檔,返回驗證結果和身份信息 應用後端->>應用前端: 返回驗證結果和身份信息 應用前端->>用戶: 返回登錄結果

場景2. 基於VC/VP的DID登錄

需求

有些應用並不是任何獲得了DID身份的用戶就能夠登錄的,比給企業T做一個員工福利網站,只有企業T的員工才能正常登錄。所以我們需要基於VC(可驗證憑證)和VP(可驗證表示)的DID登錄。

技術實現

前置條件是企業T已經作爲頒證機構,給自己企業的員工都頒發了員工卡VC,員工在登錄網站的時候,需要出示該員工卡VC,驗證VC通過才能正常登錄。流程如下:

  1. 用戶在第三方應用上發起登錄請求。
  2. 第三方應用後端生成一個隨機數(nonce)和要求的VC類型,發送給錢包瀏覽器插件。
  3. 錢包瀏覽器插件根據要求的VC類型,從用戶的DID錢包中選擇相應的VC,並生成一個VP(包含DID、VC和nonce)。
  4. 用戶使用DID私鑰對VP進行簽名,並將簽名的VP發送給第三方應用後端。
  5. 第三方應用後端將簽名的VP發送給DID合約,通過查詢合約的方式進行驗證。
  6. DID合約首先驗證VP的簽名。如果簽名驗證通過,繼續檢查VP中的VC。這包括驗證VC的簽名、檢查VC的頒發者和過期時間等。
  7. 如果VP和VC的驗證都成功,DID合約將返回用戶的身份信息給第三方應用後端。
  8. 第三方應用後端根據返回的身份信息,完成用戶的登錄或註冊操作,並返回登錄結果給用戶。
sequenceDiagram 用戶->>應用前端: 發起登錄請求 應用前端->>應用後端: 請求隨機數(nonce)和VC類型 應用後端->>應用前端: 返回隨機數(nonce)和VC類型 應用前端->>錢包插件: 發送隨機數(nonce)和VC類型 錢包插件->>用戶: 選擇相應的VC 用戶->>錢包插件: 用DID私鑰簽名VP 錢包插件->>應用前端: 發送簽名的VP 應用前端->>應用後端: 請求驗證VP和VC 應用後端->>DID合約: 發送VP和VC進行驗證 DID合約->>應用後端: 返回驗證結果和身份信息 應用後端->>應用前端: 返回驗證結果和身份信息 應用前端->>用戶: 返回登錄結果

總結

基於DID進行登錄相對於互聯網的OAuth登錄有以下優勢:

  1. 更高的安全性:在DID登錄中,用戶的私鑰始終保存在錢包中,不會泄露給其他參與方,減少了中心化存儲的風險。而在OAuth登錄中,用戶的訪問令牌和刷新令牌需要在第三方應用和授權服務器之間傳遞,增加了被攻擊者截獲的風險。
  2. 更好的隱私保護:DID登錄允許用戶選擇性地披露自己的身份信息,甚至是基於零知識證明保護隱私,而不是像OAuth登錄那樣,將用戶的信息都暴露給第三方應用。
  3. 去中心化:DID是基於區塊鏈技術的去中心化身份解決方案,不依賴於任何中心化的身份提供商。這意味着用戶可以擁有並控制自己的數字身份,而無需依賴於第三方服務。而OAuth登錄依賴於授權服務器,如Google或Facebook,這些服務可能會受到審查、關閉或遭受攻擊。
  4. 更簡潔的用戶體驗:DID登錄簡化了身份驗證過程,用戶只需要使用錢包生成、管理DID和簽名,無需記住多個用戶名和密碼。而在OAuth登錄中,用戶需要在不同的授權服務器上創建和管理賬戶,可能導致多個用戶名和密碼的混淆。
  5. 更易於實現自主身份:通過使用DID,用戶可以建立自主身份(Self-Sovereign Identity,SSI),這是一種用戶擁有並控制自己身份信息的模型。在這種模型中,用戶可以將身份信息存儲在自己控制的設備上,而不是依賴於中心化的身份提供商。這有助於實現更高程度的隱私保護和數據所有權。而在OAuth登錄中,用戶的身份信息通常由授權服務器管理,用戶無法完全控制自己的數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章