SIWE: Panduan Praktik Standar Masuk Ethereum yang Baru

SIWE: Alat Kuat untuk Masuk Ethereum

SIWE (Masuk dengan Ethereum) adalah metode untuk memverifikasi identitas pengguna di Ethereum. Mirip dengan memulai transaksi, ini membuktikan kontrol pengguna atas dompet melalui tanda tangan. Saat ini, sebagian besar plugin dompet utama telah mendukung metode otentikasi sederhana ini.

Artikel ini terutama membahas skenario tanda tangan di Ethereum, tanpa membahas blockchain publik lainnya seperti Solana, SUI, dan lain-lain.

SIWE menggunakan panduan: Bagaimana membuat Dapp Anda lebih kuat?

Kapan SIWE Diperlukan?

Jika Dapp Anda memiliki kebutuhan berikut, Anda dapat mempertimbangkan untuk menggunakan SIWE:

  • Memiliki sistem pengguna yang independen
  • Perlu mencari informasi yang terkait dengan privasi pengguna

Untuk Dapp( yang terutama menyediakan fungsi pencarian seperti penjelajah blok ), mungkin tidak memerlukan SIWE.

Meskipun koneksi melalui dompet dapat membuktikan identitas di frontend, namun untuk panggilan API yang memerlukan dukungan backend, hanya mengirimkan alamat tidaklah cukup, karena alamat adalah informasi publik dan siapa pun dapat menggunakannya.

SIWE Penggunaan Manual: Bagaimana Membuat Dapp Anda Lebih Kuat?

Prinsip dan Proses SIWE

Proses SIWE dapat diringkas dalam tiga langkah: menghubungkan dompet - menandatangani - mendapatkan identitas.

sambungkan dompet

Ini adalah operasi umum dalam aplikasi Web3, menghubungkan dompet pengguna melalui plugin dompet.

tanda tangan

Langkah-langkah tanda tangan mencakup mendapatkan nilai Nonce, tanda tangan dompet, dan verifikasi tanda tangan backend.

Pertama, ambil nilai Nonce yang dihasilkan secara acak dari backend, backend akan mengaitkannya dengan alamat saat ini.

Setelah mendapatkan nilai Nonce dari frontend, bangun konten tanda tangan, termasuk Nonce, nama domain, ID rantai, dan informasi lainnya, lalu gunakan metode tanda tangan dompet untuk menandatangani.

Terakhir, kirim tanda tangan ke backend untuk diverifikasi.

mendapatkan identitas

Setelah verifikasi tanda tangan di backend berhasil, akan mengembalikan identitas pengguna ( seperti JWT). Permintaan selanjutnya dari frontend harus menyertakan alamat dan identitas, untuk membuktikan kepemilikan dompet.

SIWE使用手册:如何让你的Dapp更加强大?

Praktik SIWE

Di bawah ini, kita akan mempraktikkan proses dasar SIWE melalui sebuah Demo sederhana, dengan tujuan agar Dapp dapat mengembalikan JWT yang digunakan untuk verifikasi identitas.

Perhatian: Demo ini hanya digunakan untuk menunjukkan proses dasar, penggunaan di lingkungan produksi mungkin memiliki risiko keamanan.

Persiapan kerja

Kami menggunakan Next.js untuk mengembangkan aplikasi full-stack, perlu menyiapkan lingkungan Node.js.

Instal ketergantungan

Pertama, instal Next.js:

npx create-next-app@14

Selesaikan instalasi sesuai petunjuk.

Masuk ke direktori proyek dan mulai:

npm run dev

Akses localhost:3000 untuk melihat proyek Next.js dasar.

Instal dependensi terkait SIWE

Kami menggunakan Ant Design Web3 untuk menghubungkan dompet dan menerapkan fungsi SIWE:

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

SIWE menggunakan manual: Bagaimana membuat Dapp Anda lebih kuat?

memperkenalkan Wagmi

Mengimpor WagmiProvider di layout.tsx:

jsx "gunakan klien"; import { getNonce, verifyMessage } from "@/app/api"; import { Mainnet, MetaMask, OkxWallet, TokenPocket, WagmiWeb3ConfigProvider, WalletConnect, } dari "@ant-design/web3-wagmi"; import { QueryClient } from "@tanstack/react-query"; import React dari "react"; import { createSiweMessage } from "viem/siwe"; import { http } dari "wagmi"; import { JwtProvider } from "./JwtProvider";

const YOUR_WALLET_CONNECT_PROJECT_ID = "c07c0051c2055890eade3556618e38a6"; const queryClient = new QueryClient();

const WagmiProvider: React.FC = ({ children }) => { const [jwt, setJwt] = React.useState(null);

return ( <wagmiweb3configprovider siwe="{{" getnonce:="" async="" (address)=""> (await getNonce(address)).data, createMessage: (props) => { return createSiweMessage({ ...props, statement: "Ant Design Web3" }); }, verifyMessage: async (message, signature) => { const jwt = (await verifyMessage(message, signature)).data; setJwt(jwt); return !!jwt; }, }} chains={[Mainnet]} transports={{ [Mainnet.id]: http(), }} walletConnect={{ projectId: YOUR_WALLET_CONNECT_PROJECT_ID, }} dompet={[ MetaMask(), WalletConnect(), TokenPocket({ grup: "Populer", }), OkxWallet(), ]} queryClient={queryClient} > {children} ); };

ekspor default WagmiProvider;

Kemudian tambahkan tombol untuk menghubungkan dompet:

jsx "gunakan klien"; import type { Account } from "@ant-design/web3"; import { ConnectButton, Connector } from "@ant-design/web3"; import { Flex, Space } dari "antd"; import React dari "react"; import { JwtProvider } from "./JwtProvider";

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

const renderSignBtnText = ( defaultDom: React.ReactNode, akun?: Akun ) => { const { address } = account ?? {}; const ellipsisAddress = address ? ${address.slice(0, 6)}...${address.slice(-6)} : ""; kembali Masuk sebagai ${ellipsisAddress}; };

return ( <>

JWT: {jwt}
); }

Dengan cara ini, sebuah kerangka dasar SIWE untuk masuk telah terwujud.

SIWE menggunakan manual: bagaimana membuat Dapp Anda lebih kuat?

implementasi antarmuka

Sekarang mari kita implementasikan beberapa antarmuka yang diperlukan untuk backend.

Nonce

Menghasilkan Nonce acak dan mengaitkannya dengan alamat:

javascript import { randomBytes } from "crypto"; import { addressMap } from "../cache";

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

jika (!address) { throw new Error("Invalid address"); } const nonce = randomBytes(16).toString("hex"); addressMap.set(address, nonce); return Response.json({ data: nonce, }); }

verifikasiPesan

Verifikasi tanda tangan dan kembalikan JWT:

javascript import { createPublicClient, http } from "viem"; import { mainnet } dari "viem/chains"; import jwt dari "jsonwebtoken"; import { parseSiweMessage } from "viem/siwe"; import { addressMap } dari "../cache";

const JWT_SECRET = "your-secret-key"; // Silakan gunakan kunci yang lebih aman, dan tambahkan pemeriksaan kedaluwarsa yang sesuai, dll.

const publicClient = createPublicClient({ rantai: mainnet, transport: http(), });

ekspor async function POST(request: Request) { const { signature, message } = await request.json();

const { nonce, address = "0x" } = parseSiweMessage(message);

jika (!nonce || nonce !== addressMap.get(address)) { throw new Error("Nonce tidak valid"); }

const valid = await publicClient.verifySiweMessage({ pesan, alamat, tanda tangan, });

jika (!valid) { throw new Error("Tanda tangan tidak valid"); }

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

Dengan ini, sebuah Dapp SIWE dasar untuk masuk telah selesai dikembangkan.

Panduan Penggunaan SIWE: Bagaimana Membuat Dapp Anda Lebih Kuat?

Optimalisasi Kinerja

Untuk meningkatkan kecepatan verifikasi, disarankan untuk menggunakan layanan node khusus. Di sini kami menggunakan layanan node ZAN, menggantikan RPC default publicClient:

javascript const publicClient = createPublicClient({ rantai: mainnet, transport: http('), //ganti dengan RPC layanan node ZAN yang didapat });

Ini dapat secara signifikan mengurangi waktu verifikasi dan meningkatkan kecepatan antarmuka.

SIWE使用手册:如何让你的Dapp更加强大?

ETH2.26%
Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 7
  • Bagikan
Komentar
0/400
ImpermanentPhilosophervip
· 07-25 02:45
Tanda tangan ini adalah paten ETH lagi.
Lihat AsliBalas0
SignatureCollectorvip
· 07-24 06:01
Verifikasi tanda tangan seperti ini seharusnya sudah diatur sejak lama.
Lihat AsliBalas0
StableGeniusDegenvip
· 07-24 06:00
Saya sudah lama ingin mencoba ini. Semua dompet mendukung.
Lihat AsliBalas0
ConfusedWhalevip
· 07-24 05:58
Bear Market bisa tenang sedikit lagi untuk berinovasi
Lihat AsliBalas0
Lonely_Validatorvip
· 07-24 05:57
Verifikasi khusus ETH, ya, sangat rumit.
Lihat AsliBalas0
MevHuntervip
· 07-24 05:48
solana juga harus dipahami!
Lihat AsliBalas0
NewDAOdreamervip
· 07-24 05:39
Dompet verifikasi tanda tangan sangat menyenangkan
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)