同意クレームは、利用規約、プライバシーポリシー、その他の正式な合意書などの文書に対するユーザーの明確な同意を得るための強力なツールです。このクレームは、単純なチェックボックスの代わりに、ユーザーが文書のハッシュ(ダイジェスト)に暗号署名することを要求し、検証可能で否認不可能な同意の記録を作成します。
このプロセスにより、DID Walletがユーザーの署名を要求する前に文書の完全性を独立して検証するため、ユーザーが提示された文書の正確なバージョンに同意したことが保証されます。
仕組み
同意クレームのワークフローは、セキュリティと透明性を考慮して設計されています:
アプリケーション側
アプリケーションは、ドキュメントがホストされているURL(
uri)と、そのドキュメントの内容について事前に計算された暗号学的ハッシュ(digest)をウォレットに提供します。ウォレット側
ユーザーのDID Walletがリクエストを受信します。
検証
ウォレットは提供された
uriからドキュメントを取得し、同じmethod(例:SHA256)を使用してそのハッシュを計算し、アプリケーションから送信されたdigestと比較します。ユーザーの同意
ハッシュが一致する場合、ウォレットはドキュメントと確認プロンプトをユーザーに表示します。一致しない場合、ウォレットはユーザーに潜在的な不一致を警告し、おとり商法から保護します。
署名
ユーザーの承認後、ウォレットは検証済みのダイジェストにユーザーの秘密鍵で署名します。
応答
結果の署名は、同意の証明としてアプリケーションに送り返されます。

パラメーター
agreement クレームオブジェクトは、次のパラメーターを受け入れます:
| パラメーター | タイプ | 説明 |
|---|---|---|
uri | string | 必須。ユーザーが確認し同意する必要があるドキュメント(例:利用規約)のURL。http または https URLである必要があります。 |
digest | string | 必須。ドキュメントの内容の暗号学的ハッシュ(ダイジェスト)。ウォレットは署名を求める前に、このダイジェストを uri にあるドキュメントと照合して検証します。 |
method | string | 任意。ダイジェストの作成に使用されるハッシュアルゴリズム。デフォルトは sha2 です。サポートされているメソッドには sha2、sha3、keccak が含まれます。 |
description | string | 任意。ウォレットでユーザーに表示されるカスタムメッセージで、何に同意するのかを説明します。デフォルトは「続行するには同意を確認してください。」です。 |
例:利用規約への同意を要求する
以下は、WalletHandlers を設定して、利用規約文書へのユーザーの同意を要求する方法です。まず、terms.txt ファイルのSHA256ハッシュを生成する必要があります。
ユーザーの同意を要求する
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と一緒に、永続的で検証可能な同意の記録として保存できます。
次のステップ
ユーザーの同意を確保した後、ユーザーが所有する特定の属性や資格を検証する必要があるかもしれません。検証可能な資格情報を要求することで、その方法を学びましょう。