跳到主要內容

協議聲明

協議聲明是一個強大的工具,用於獲取使用者對服務條款、隱私政策或任何其他正式協議等文件的明確同意。此聲明並非簡單的核取方塊,而是要求使用者以密碼學方式簽署文件的雜湊值(摘要),從而創建一個可驗證且不可否認的同意記錄。

此過程確保使用者同意您所呈現文件的確切版本,因為 DID 錢包會在請求使用者簽名之前,獨立驗證文件的完整性。

運作方式

協議聲明的工作流程旨在確保安全性和透明度:

  1. 應用程式端

    您的應用程式向錢包提供託管文件的 URL (uri) 以及該文件內容預先計算的密碼學雜湊值 (digest)。

  2. 錢包端

    使用者的 DID 錢包接收此請求。

  3. 驗證

    錢包從提供的 uri 獲取文件,使用相同的 method(例如 SHA256)計算其雜湊值,並將其與您的應用程式發送的 digest 進行比較。

  4. 使用者同意

    如果雜湊值匹配,錢包會向使用者顯示文件和確認提示。如果不匹配,錢包會警告使用者可能存在差異,以保護他們免受「偷天換日」攻擊。

  5. 簽名

    使用者批准後,錢包會使用使用者的私鑰簽署已驗證的摘要。

  6. 回應

    生成的簽名會被發送回您的應用程式,作為同意的證明。

Agreement Claim

參數

agreement 聲明物件接受以下參數:

參數類型描述
uristring必需。使用者需要審閱並同意的文件 URL(例如服務條款)。必須是 http 或 https URL。
digeststring必需。文件內容的密碼學雜湊值(摘要)。錢包在要求簽名之前,會根據 uri 處的文件驗證此摘要。
methodstring選填。用於創建摘要的雜湊演算法。預設為 sha2。支援的方法包括 sha2、sha3 和 keccak。
descriptionstring選填。在錢包中向使用者顯示的自訂訊息,解釋他們同意的內容。預設為「請確認您的同意以繼續」。

範例:請求同意服務條款

以下是如何設定 WalletHandlers 以請求使用者同意服務條款文件。您需要先為您的 terms.txt 檔案產生一個 SHA256 雜湊值。

請求使用者同意

javascript
const { WalletHandlers } = require('@arcblock/did-connect');

// 您可以使用類似以下的指令來產生此摘要:
// shasum -a 256 path/to/your/terms.txt
const termsDigest = 'f2ca1bb6c7e907d06dafe4687e579fce76b37e4e93b7605022da52e6ccc26fd2';

const handlers = new WalletHandlers({
  chainInfo: { host: 'https://beta.abtnetwork.io/api' },
  appInfo: {
    name: 'My App',
    description: 'My App Description',
    icon: 'https://arcblock.oss-cn-beijing.aliyuncs.com/images/wallet-round.png',
    link: 'https://my-app.com',
  },
  claims: {
    agreement: {
      description: 'Please read and agree to our new Terms of Service to proceed.',
      uri: 'https://my-app.com/terms.txt',
      method: 'sha2',
      digest: termsDigest,
    },
  },
  onAuth: async ({ claims, userDid }) => {
    // claims 陣列將包含協議聲明的回應
    const agreementClaim = claims.find(c => c.type === 'agreement');
    console.log(`${userDid} agreed and signed with digest:`, agreementClaim.sig);

    // 您現在可以根據使用者的 DID 和原始摘要來驗證簽名
  },
});

在 onAuth 回呼中,您會收到 sig 欄位,這是使用者對文件摘要的簽名。您可以將此簽名與使用者的 DID 一起儲存,作為他們同意的持久、可驗證的記錄。

後續步驟

在獲得使用者同意後,您可能需要驗證他們擁有的特定屬性或資格。了解如何透過請求可驗證憑證來實現這一點。

可驗證憑證聲明

請求使用者出示可驗證憑證(VC)以證明某個屬性或資格。

閱讀更多