Solidity
乙太坊唱歌請求如何工作?
有什麼需要讓一些 dapp 網站在你第一次訪問他們的網站時要求你通過 metamask 簽署消息?
正如我所讀到的,這是為了讓他們確保您獲得身份驗證。所以你在消息上簽名。
- 只要不是黑客交易,您簽署的這條消息可以是任何東西嗎?
- 我們對消息進行簽名後,元遮罩得到的簽名在哪裡?網站有儲存嗎?或者如果生成了簽名,網站是否只是等待,如果是,它會做什麼,以便對於每個下一個請求,它認為使用者已經通過身份驗證?
- 也許,dapp 根本不儲存簽名,它只關心使用者是否可以對消息進行簽名,如果簽名返回 true,則使用者已通過身份驗證。但是對於第二個和第三個等請求,使用者如何保持身份驗證?
一個很好的解釋將不勝感激。
有什麼需要讓一些dapp網站要求你簽名消息
它確定簽名者知道給定乙太坊地址的私鑰。例如,Etherscan 將允許您為給定契約配置網站、社交媒體連結、徽標等,但首先您必須通過從部署契約的同一帳戶簽署消息來表明這是您的契約,以顯示你能行。
只要不是黑客交易,您簽署的這條消息可以是任何東西嗎?
我不確定“只要不是黑客交易”是什麼意思。
一種常見的模式是創建任意長消息的雜湊並對其進行簽名。考慮一個使用乙太坊簽名對使用者進行身份驗證的 API 端點。POST 可能類似於:
{ someObject: { // arbitrarily long } signature: <short string> }
- 雜湊
someObject
- 簽署雜湊
- 發送包裹
在接收方:
- 雜湊
someObject
- 發件人 = ECRecover(消息雜湊,簽名)
我們簽署消息後,元遮罩得到的簽名在哪裡?
它返回給請求消息簽名的 JavaScript。
網站有儲存嗎?或者如果生成了簽名,網站是否只是等待,如果是,它會做什麼,以便對於每個下一個請求,它認為使用者已經通過身份驗證?
它想做什麼就做什麼。有關可能性,請參閱上一個答案。作為一個注意事項,在整個方案中添加某種重放保護通常是一個好主意,這樣一個簽名的消息就不能被多次使用。例如,乙太坊使用
nonce
所以“匯款”一旦人們看到簽名就不能重複發送。對於第二個和第三個等請求,使用者如何保持身份驗證
這一切都取決於應用程序使用簽名的目的。例如,它可以進行一次身份驗證並設置持久會話狀態。或者,它會在對每條消息進行簽名的基礎上工作,即與 API 的每次互動都經過身份驗證。
希望能幫助到你。