我需要在我自己的域/服务器上验证连接他的MetaMask钱包的用户是特定NFT的所有者,以便允许他使用特殊功能?基本上,我想让用户访问只有这个NFS的所有者才拥有的区域。
我原来的非功能性测试在opensea但我不能使用opensea隐藏区给用户一个隐藏的密码选项,因为下一个所有者(转售后)和旧的所有者将有相同的旧密码,用户仍然可以访问。但我需要只有当前的所有者有访问权限。
我的用户/访问者已经可以在我自己的域连接MetaMask,我得到活跃帐户的公共ETH地址,但由于这只是javascript,我的后端是PHP,我不能只是将MetaMask信息发布到我的PHP后端,因为这很容易欺骗/破解。
我如何确保当前连接的MetaMask帐户与NFT所有者(我知道)相同,并允许仅为该用户访问URL ?
我当前的状态是用户连接他的MetaMask,我使用opensea API来检查谁是NFT的当前所有者。我可以比较两个eth地址,但这其中的缺陷显然是我使用ajax将MetaMask公共地址发送到我的后端,这仅用于测试,因为这当然是零保存!
提前感谢你给我的任何建议、帮助、提示。
PS:我的后台是PHP经过数小时数天的研究,我找到了一个适合我的解决方案。
以下是需要的步骤。
- 使用MetaMask API让用户连接到您的站点。这在MetaMask API中很容易解释。
- 一旦你想验证MetaMask所有者是NFT的合法所有者,你需要首先查询OpenSea(或其他地方)NFT的当前所有者。在我的例子中,我将OpenSea API用于特定的nft。一旦你得到了所有者,你就可以验证了。
- 在你的网站上你需要问问用户与MetaMask签署自定义消息。有不同的选择。更多关于此:MetaMask签名。例如,我发送了一条短文本消息,其中包含我首先在PHP后端中创建的唯一代码。这样我也保存代码和自定义消息到我的MySQL。 一旦用户签名,你得到签名代码,你可以通过ajax等发送回你的PHP后端没有问题。只有您在签名代码中请求的帐户的所有者才能使用正确的帐户进行签名。
- 一旦你得到了签名代码在你的PHP后端,你可以使用快速椭圆曲线密码在PHP和PHP -ecrecover检查代码对你之前创建的唯一代码和用户签名的消息。作为响应,您将获得签名者帐户ETH地址,并准备进行比较。如果签名者ETH地址与NFT所有者相同,则可以将签名者视为NFT所有者。
我相信这是安全的,但我不是这方面的专家。在我的情况下,这只授权一个NFT所有者在我的社区页面的某个封闭区域,并没有真正的高风险,但也许有人提出了一些安全的想法。然而,我发现其他NFT页面甚至Opensea的工作方式都类似。
我希望这指出了正确的方向,我失去了相当多的时间弄清楚,因为大多数解决方案是Node.js等,而不是PHP后端。