Ethereumでのサインイン(SIWE)を実装したばかりで、コアの概念を理解すれば実はかなりシンプルなプロセスだということを共有したいです。



というわけで、Sign-In with Ethereum(SIWE)についてですが、これは基本的にあなたが実際にウォレットアドレスを所有していることを検証する方法です。あなたがdappにウォレットを接続すると、フロントエンドはあなたが誰かを知っていますが、バックエンドはあなたがそのアドレスの主張者でないことを確認する手段を持っていません。SIWEは、あなたにメッセージに署名させることで所有権を証明します。これは取引の仕組みに似ていて、あなたはプライベートキーで何かに署名します。

このプロセスは大きく3つのステップに分かれます:ウォレットを接続し、メッセージに署名し、次にアイデンティティトークンを取得します。理解すれば非常にシンプルな流れです。

ただし、すべてのdappにSIWEが必要なわけではありません。例えば、公開データをクエリするだけのブロックエクスプローラーのような場合は必要ありません。でも、ユーザーアカウントを持つdappや、機密性の高いデータを扱う場合は、SIWEは非常に価値があります。

私はNext.jsを使ってフルスタックの実装を行いました。フロントエンドとバックエンドの両方を一つのプロジェクトで処理できるからです。Ant Design Web3やWagmiといったnpmパッケージから始めました。これらは多くの重い作業を処理してくれます。コアの依存関係はnpmの一つのコマンドでインストールでき、セットアップ時間を大幅に短縮します。

署名の流れは、まずバックエンドからnonceを取得することから始まります。このnonceはアドレスごとにユニークで、リプレイ攻撃を防ぎます。その後、nonce、ドメイン、チェーンIDを含むメッセージを作成し、それに署名します。署名したメッセージとともにバックエンドに送信し、検証を行います。署名が有効なら、その後のリクエストに使えるJWTトークンを受け取ります。

気づいた点ですが、デフォルトのRPCノードを使うと検証に約30秒かかり、UX的にかなり厳しいです。専用のノードサービス(私はZANを使用)に切り替えると、その時間は大幅に短縮されました。運用環境に導入するなら、これは絶対に最適化すべきです。

ドキュメントからのセキュリティに関する注意点も重要です。提供されているデモコードはあくまで教育用です。実運用では、適切なJWTの取り扱いやレートリミット、その他のセキュリティ対策が必要です。例のコードをそのまま本番環境に貼り付けるのは避けてください。

ユーザー認証が必要なdappを作るなら、SIWEはほぼ標準的なアプローチになっています。npmエコシステムも成熟してきており、以前ほど統合が面倒ではなくなっています。
ETH-0.84%
原文表示
このページには第三者のコンテンツが含まれている場合があり、情報提供のみを目的としております(表明・保証をするものではありません)。Gateによる見解の支持や、金融・専門的な助言とみなされるべきものではありません。詳細については免責事項をご覧ください。
  • 報酬
  • コメント
  • リポスト
  • 共有
コメント
コメントを追加
コメントを追加
コメントなし
  • ピン