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.
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:
Obter o valor de Nonce: chamar a interface do backend para obter um valor de Nonce aleatório, associado ao endereço.
Construir o conteúdo da assinatura: inclui o valor Nonce, o nome de domínio, o ID da cadeia e outras informações.
Assinatura da carteira: utilizar o método fornecido pela carteira para assinar o conteúdo.
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.
Prática SIWE
Vamos desenvolver uma aplicação full-stack que suporte SIWE usando Next.js.
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.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
8 Curtidas
Recompensa
8
6
Compartilhar
Comentário
0/400
BTCRetirementFund
· 15h atrás
Não consigo entender, o que é essa coisa chamada SIWE?
Ver originalResponder0
LightningLady
· 15h atrás
E esta backend não é necessária? SIWE não é bom?
Ver originalResponder0
SatoshiNotNakamoto
· 15h atrás
Isso não é apenas um login com assinatura? Por que fazer algo tão elaborado?
Ver originalResponder0
MevShadowranger
· 15h atrás
Ah, isto não é apenas a armadilha do web2, a dar uma pele ao Blockchain?
Ver originalResponder0
MEVSandwich
· 15h atrás
Hmm, parece que a validação do backend do ecossistema ETH é bastante complicada.
Ver originalResponder0
AirdropLicker
· 15h atrás
Ah, isso! A assinatura também pode ser divertida. Aprendi, aprendi.
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.
O seu projeto precisa de SIWE?
Se a sua Dapp tiver as seguintes necessidades, pode considerar usar o SIWE:
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:
Obter o valor de Nonce: chamar a interface do backend para obter um valor de Nonce aleatório, associado ao endereço.
Construir o conteúdo da assinatura: inclui o valor Nonce, o nome de domínio, o ID da cadeia e outras informações.
Assinatura da carteira: utilizar o método fornecido pela carteira para assinar o conteúdo.
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.
Prática SIWE
Vamos desenvolver uma aplicação full-stack que suporte SIWE usando Next.js.
trabalho de preparação
npx create-next-app@14
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} ); };
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> ); }
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 }); }
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 }); }
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.