簡體   English   中英

通過 MetaMask 連接驗證用戶是否是 NFT 的所有者? 確保連接用戶的公共 eth 地址與 NFT 的相同?

[英]Verify user is owner of an NFT via MetaMask connection? Make sure connected users public eth address is the same as of the NFT?

我需要在我自己的域/服務器上驗證連接了他的 MetaMask 錢包的用戶是特定 NFT 的所有者,以便允許他使用特殊功能? 基本上,我想讓用戶訪問只有這個 NFS 的所有者才能擁有的區域。

我原來的 NFT 在 opensea 出售,但我不能使用 opensea 隱藏區域選項給用戶一個隱藏密碼,因為下一個所有者(轉售后)和舊所有者將擁有相同的密碼並且舊所有者仍然可以訪問像這樣。 但我需要只有當前所有者才能訪問。

我的用戶/訪問者已經可以在我自己的域中與 MetaMask 連接,並且我獲得了活動帳戶的公共 ETH 地址,但由於這只是 javascript 而我的后端是 PHP,我不能只將 MetaMask 信息發布到我的 PHP 后端,因為這很容易被欺騙/破解。

如何確保當前連接的 MetaMask 帳戶與 NFT 所有者(我知道)相同,並只允許該用戶訪問 URL?

我目前的狀態是用戶連接了他的 MetaMask,我使用 opensea API 檢查當前誰是 NFT 的所有者。 我可以比較兩個 eth 地址,但其中的缺陷顯然是我使用 ajax 將 MetaMask 公共地址發送到我的后端,這僅用於測試,因為這當然是零保存!

提前感謝您的任何想法,幫助,我能得到的小費。

PS:我的后端是 PHP

經過數小時和數天的研究,我找到了一個適合我的解決方案。

這是所需的步驟。

  1. 使用 MetaMask API 讓用戶連接到您的站點。 這在 MetaMask API 中非常簡單且很好地解釋了。
  2. 一旦您想驗證 MetaMask 所有者是 NFT 的合法所有者,您需要首先查詢 OpenSea(或其他地方)NFT 的當前所有者。 就我而言,我將 OpenSea API 用於我的特定 NFT。 獲得所有者后,您就可以進行驗證了。
  3. 在您的網站上,您需要要求用戶使用 MetaMask 簽署自定義消息。 有不同的選擇可以做到這一點。 更多關於這里的信息: MetaMask 簽名 例如,我發送一條簡短的文本消息,其中包含我首先在我的 PHP 后端創建的唯一代碼。 這樣做我還將代碼和自定義消息保存到我的 MySQL 中。
  4. 用戶簽名后,您將獲得簽名代碼,您可以通過 ajax 等將其發送回您的 PHP 后端,而不會出現問題。 只有您在簽名代碼中請求的帳戶所有者才能使用正確的帳戶進行簽名。
  5. 在 PHP 后端獲得簽名代碼后,您可以使用 PHP 中的快速橢圓曲線密碼術和php-ecrecover來對照您之前創建的唯一代碼和用戶簽名的消息檢查代碼。 作為響應,您將獲得簽名者帳戶的 ETH 地址並准備進行比較。 如果簽名者 ETH 地址與 NFT 所有者相同,您就可以開始了,您可以將簽名者視為 NFT 的所有者。

我相信這可以安全使用,但我不是這方面的專家。 就我而言,這僅授權 NFT 所有者對我的社區頁面中的某個封閉區域進行授權,並沒有涉及到真正的高風險,但也許有人對此提出了一些安全想法。 但是,我發現其他 NFT 頁面甚至 Opensea 的工作方式類似。

我希望這為某人指明了正確的方向,因為大多數解決方案都是 Node.js 等,但不是 PHP 后端,所以我花了很多時間弄清楚這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM