SIWE: Guia prático completo para construir Dapps de validação de identificação Ethereum

SIWE: Uma ferramenta poderosa para autenticação de identidade em Dapps

SIWE (Sign-In with Ethereum) é um método para verificar a identidade do usuário na Ethereum, semelhante a iniciar uma transação, provando o controle do usuário sobre a carteira. Atualmente, a maioria dos plugins de carteira suporta esse método de assinatura simples.

Este artigo discute principalmente cenários de assinatura na Ethereum, não abordando outras blockchains públicas.

Manual de uso do SIWE: como tornar seu Dapp mais poderoso?

O seu projeto precisa de SIWE?

Se a sua Dapp tiver as seguintes necessidades, pode considerar usar o SIWE:

  • Ter o seu próprio sistema de utilizadores
  • É necessário consultar informações relacionadas à privacidade do utilizador

Para Dapp( que fornece principalmente funcionalidades de consulta, como etherscan), não é necessário usar SIWE.

Embora a identidade possa ser confirmada no front-end após a conexão da carteira, para chamadas de interface que requerem suporte de back-end, apenas transmitir o endereço não pode provar a identidade, pois o endereço é uma informação pública.

Princípio e Processo do SIWE

O processo do SIWE inclui três etapas: conectar a carteira, assinar, obter identificação.

conectar carteira

Esta é uma operação comum do Web3, conectando-se ao Dapp através de um plugin de carteira.

assinatura

Os passos de assinatura do SIWE incluem:

  1. Obter o valor de Nonce: chamar a interface do backend para obter um valor de Nonce aleatório, associado ao endereço.

  2. Construir o conteúdo da assinatura: inclui o valor Nonce, o nome de domínio, o ID da cadeia e outras informações.

  3. Assinatura da carteira: utilizar o método fornecido pela carteira para assinar o conteúdo.

  4. Enviar assinatura: enviar a assinatura para verificação no backend.

obter identificação

Após a validação da assinatura no backend, retorna a identificação do usuário ( como JWT). As solicitações subsequentes devem incluir o endereço e a identificação, para provar a propriedade da carteira.

Manual de Uso do SIWE: Como tornar seu Dapp mais poderoso?

Prática SIWE

Vamos desenvolver uma aplicação full-stack que suporte SIWE usando Next.js.

trabalho de preparação

  1. Instalar o Next.js:

npx create-next-app@14

  1. Instalar as dependências relacionadas ao SIWE:

npm install antd @ant-design/web3 @ant-design/web3-wagmi wagmi viem @tanstack/react-query --save

introduzir Wagmi

Importar WagmiProvider em layout.tsx:

jsx import { WagmiWeb3ConfigProvider } from "@ant-design/web3-wagmi";

const WagmiProvider = ({ children }) => { return ( <wagmiweb3configprovider config="{{" siwe:="" {="" getnonce:="" async="" (address)=""> (await getNonce(address)).data, createMessage: (props) => createSiweMessage({ ...props, statement: "Ant Design Web3" }), verifyMessage: async (message, signature) => { const jwt = (await verifyMessage(message, signature)).data; setJwt(jwt); return !!jwt; }, }, chains: [Mainnet], transportes: { [Mainnet.id]: http(), }, carteiras: [MetaMask(), WalletConnect(), TokenPocket(), OkxWallet()] }} > {children} ); };

Manual de Uso do SIWE: Como tornar seu Dapp mais poderoso?

adicionar botão de conexão

Criar um botão para conectar a carteira e assinar:

jsx export default function App() { const jwt = React.useContext(JwtProvider);

return ( <connectbutton.connector> {({ conta, conectar }) => ( )} </connectbutton.connector> ); }

Manual de uso do SIWE: Como tornar seu Dapp mais poderoso?

implementar interface de backend

Interface Nonce

javascript export async function GET(request) { const { searchParams } = new URL(request.url); const address = searchParams.get("address");

se (!endereço) { throw new Error("Endereço inválido"); } const nonce = randomBytes(16).toString("hex"); addressMap.set(address, nonce); return Response.json({ data: nonce }); }

Manual de uso do SIWE: como tornar seu Dapp mais poderoso?

interface de verificação de assinatura

javascript export async function POST(request) { const { signature, message } = await request.json(); const { nonce, address = "0x" } = parseSiweMessage(message);

if (!nonce || nonce !== addressMap.get(address)) { throw new Error("Nonce inválido"); }

const valid = await publicClient.verifySiweMessage({ mensagem, endereço, assinatura, });

se (!valid) { throw new Error("Assinatura inválida"); }

const token = jwt.sign({ address }, JWT_SECRET, { expiresIn: "1h" }); return Response.json({ data: token }); }

SIWE Manual de Uso: Como tornar seu Dapp mais poderoso?

Otimização de desempenho

Para aumentar a velocidade de validação, recomenda-se o uso de um serviço de nó especializado. Pode-se usar o serviço de nó do ZAN, substituindo o RPC padrão:

javascript const publicClient = createPublicClient({ cadeia: mainnet, transporte: http('), // serviço RPC do nó ZAN });

Isto irá aumentar significativamente a velocidade de resposta da interface.

Manual de uso do SIWE: Como tornar seu Dapp mais poderoso?

ETH-2.95%
DAPP3.79%
Ver original
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
  • Recompensa
  • 6
  • Partilhar
Comentar
0/400
BTCRetirementFundvip
· 12h atrás
Não consigo entender, o que é essa coisa chamada SIWE?
Ver originalResponder0
LightningLadyvip
· 12h atrás
E esta backend não é necessária? SIWE não é bom?
Ver originalResponder0
SatoshiNotNakamotovip
· 13h atrás
Isso não é apenas um login com assinatura? Por que fazer algo tão elaborado?
Ver originalResponder0
MevShadowrangervip
· 13h atrás
Ah, isto não é apenas a armadilha do web2, a dar uma pele ao Blockchain?
Ver originalResponder0
MEVSandwichvip
· 13h atrás
Hmm, parece que a validação do backend do ecossistema ETH é bastante complicada.
Ver originalResponder0
AirdropLickervip
· 13h atrás
Ah, isso! A assinatura também pode ser divertida. Aprendi, aprendi.
Ver originalResponder0
  • Pino
Negocie cripto em qualquer lugar e a qualquer hora
qrCode
Digitalizar para transferir a aplicação Gate
Novidades
Português (Portugal)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)