该项目演示了如何使用 MetaMask、Phantom 或任何其他支持以太坊网络的浏览器钱包对用户进行身份验证。它提供了一个简单的 Web 界面,允许用户连接他们的 MetaMask 钱包并显示他们的以太坊地址。

工作原理

此 Go 服务集成了 MetaMask 身份验证,使用以太坊区块链来验证用户。该服务提供两个主要 API 端点:/nonce和/auth。以下是该流程的工作原理概述:

1. 用户连接到 MetaMask:

  • 前端提示用户连接他们的 MetaMask 钱包。
  • 一旦用户批准连接,就会检索用户的以太坊帐户(钱包地址)。

2. 请求 Nonce(服务器端):

  • 一旦连接,前端就会向服务器发送请求,以通过端点获取唯一的随机数/nonce。
  • 服务器生成一个随机数并将其与用户的以太坊地址相关联。
  • 该随机数被发送回给客户端。

3. 用户签署 Nonce(客户端):

  • 前端使用 MetaMask 请求用户使用其私钥签署 nonce。
  • MetaMask 提供签名,该签名在身份验证请求中发送回服务器。

4. 服务器验证签名:

  • 服务器使用公共以太坊地址验证签名。
  • 如果签名匹配,则认证成功。
  • 然后,服务器可以发出会话令牌(或类似令牌)来管理用户会话。

安全说明:

Nonce 值用于防止重放攻击,确保每次身份验证尝试都是唯一的。
成功身份验证后安全地管理会话令牌(或其他形式的会话管理)非常重要。

github: https://github.com/fmiskovic/eth-auth