SIWE: Alat yang kuat untuk menyediakan identifikasi pada Dapp
SIWE (Sign-In with Ethereum) adalah metode untuk memverifikasi identitas pengguna di Ethereum, mirip dengan memulai transaksi, yang membuktikan kontrol pengguna atas dompet mereka. Saat ini, sebagian besar plugin dompet mendukung metode tanda tangan sederhana ini.
Artikel ini terutama membahas skenario tanda tangan di Ethereum, tanpa melibatkan rantai publik lainnya.
Apakah proyek Anda memerlukan SIWE?
Jika Dapp Anda memiliki kebutuhan berikut, Anda dapat mempertimbangkan untuk menggunakan SIWE:
Memiliki sistem pengguna sendiri
Perlu memeriksa informasi yang terkait dengan identifikasi pengguna
Untuk Dapp( yang terutama menyediakan fungsi pencarian seperti etherscan), SIWE tidak perlu digunakan.
Meskipun setelah menghubungkan dompet, frontend dapat mengonfirmasi identifikasi, tetapi untuk pemanggilan antarmuka yang memerlukan dukungan backend, hanya mengirimkan alamat tidak dapat membuktikan identifikasi, karena alamat adalah informasi publik.
Prinsip dan Proses SIWE
Proses SIWE terdiri dari tiga langkah: menghubungkan dompet, menandatangani, mendapatkan identifikasi.
sambungkan dompet
Ini adalah operasi Web3 yang umum, terhubung ke Dapp melalui plugin dompet.
tanda tangan
Langkah-langkah tanda tangan SIWE meliputi:
Dapatkan nilai Nonce: panggil antarmuka backend untuk mendapatkan nilai Nonce acak, yang terhubung dengan alamat.
Membangun konten tanda tangan: termasuk nilai Nonce, nama domain, ID rantai, dan informasi lainnya.
Tanda tangan dompet: Gunakan metode yang disediakan oleh dompet untuk menandatangani konten.
Kirim tanda tangan: Kirim tanda tangan untuk diverifikasi oleh backend.
mendapatkan identifikasi
Setelah verifikasi tanda tangan di backend berhasil, kembalikan identifikasi pengguna ( seperti JWT ). Permintaan selanjutnya yang menyertakan alamat dan identifikasi, dapat membuktikan kepemilikan dompet.
Praktik SIWE
Kami akan mengembangkan aplikasi full-stack yang mendukung SIWE menggunakan Next.js.
Untuk meningkatkan kecepatan verifikasi, disarankan untuk menggunakan layanan node khusus. Anda dapat menggunakan layanan node ZAN, menggantikan RPC default:
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.
8 Suka
Hadiah
8
6
Bagikan
Komentar
0/400
BTCRetirementFund
· 18jam yang lalu
Saya benar-benar tidak mengerti, SIWE itu apa sih?
Lihat AsliBalas0
LightningLady
· 18jam yang lalu
Jadi backend ini tidak digunakan? SIWE tidak enak?
Lihat AsliBalas0
SatoshiNotNakamoto
· 18jam yang lalu
Ini bukan hanya login dengan tanda tangan? Kenapa harus begitu mewah?
Lihat AsliBalas0
MevShadowranger
· 18jam yang lalu
Ah, ini bukan hanya jebakan web2 yang diberikan pada Blockchain?
Lihat AsliBalas0
MEVSandwich
· 18jam yang lalu
Hmm sepertinya verifikasi backend ekosistem ETH memang cukup merepotkan.
Lihat AsliBalas0
AirdropLicker
· 18jam yang lalu
Ah, ini, tanda tangan juga bisa dimainkan dengan cara yang menarik. Saya belajar, saya belajar.
SIWE: Panduan Praktik Dapp Full Stack untuk Membangun Identifikasi Ethereum
SIWE: Alat yang kuat untuk menyediakan identifikasi pada Dapp
SIWE (Sign-In with Ethereum) adalah metode untuk memverifikasi identitas pengguna di Ethereum, mirip dengan memulai transaksi, yang membuktikan kontrol pengguna atas dompet mereka. Saat ini, sebagian besar plugin dompet mendukung metode tanda tangan sederhana ini.
Artikel ini terutama membahas skenario tanda tangan di Ethereum, tanpa melibatkan rantai publik lainnya.
Apakah proyek Anda memerlukan SIWE?
Jika Dapp Anda memiliki kebutuhan berikut, Anda dapat mempertimbangkan untuk menggunakan SIWE:
Untuk Dapp( yang terutama menyediakan fungsi pencarian seperti etherscan), SIWE tidak perlu digunakan.
Meskipun setelah menghubungkan dompet, frontend dapat mengonfirmasi identifikasi, tetapi untuk pemanggilan antarmuka yang memerlukan dukungan backend, hanya mengirimkan alamat tidak dapat membuktikan identifikasi, karena alamat adalah informasi publik.
Prinsip dan Proses SIWE
Proses SIWE terdiri dari tiga langkah: menghubungkan dompet, menandatangani, mendapatkan identifikasi.
sambungkan dompet
Ini adalah operasi Web3 yang umum, terhubung ke Dapp melalui plugin dompet.
tanda tangan
Langkah-langkah tanda tangan SIWE meliputi:
Dapatkan nilai Nonce: panggil antarmuka backend untuk mendapatkan nilai Nonce acak, yang terhubung dengan alamat.
Membangun konten tanda tangan: termasuk nilai Nonce, nama domain, ID rantai, dan informasi lainnya.
Tanda tangan dompet: Gunakan metode yang disediakan oleh dompet untuk menandatangani konten.
Kirim tanda tangan: Kirim tanda tangan untuk diverifikasi oleh backend.
mendapatkan identifikasi
Setelah verifikasi tanda tangan di backend berhasil, kembalikan identifikasi pengguna ( seperti JWT ). Permintaan selanjutnya yang menyertakan alamat dan identifikasi, dapat membuktikan kepemilikan dompet.
Praktik SIWE
Kami akan mengembangkan aplikasi full-stack yang mendukung SIWE menggunakan Next.js.
pekerjaan persiapan
npx create-next-app@14
npm install antd @ant-design/web3 @ant-design/web3-wagmi wagmi viem @tanstack/react-query --save
memperkenalkan Wagmi
Mengimpor WagmiProvider di 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], transportasi: { [Mainnet.id]: http(), }, wallets: [MetaMask(), WalletConnect(), TokenPocket(), OkxWallet()] }} > {children} ); };
Tambahkan tombol koneksi
Buat tombol untuk menghubungkan dompet dan menandatangani:
jsx ekspor default fungsi App() { const jwt = React.useContext(JwtProvider);
return ( <connectbutton.connector> {({ akun, sambungkan }) => ( )} </connectbutton.connector> ); }
mewujudkan antarmuka belakang
Antarmuka Nonce
javascript ekspor fungsi asinkron GET(request) { const { searchParams } = new URL(request.url); const address = searchParams.get("address");
jika (!address) { throw new Error("Alamat tidak valid"); } const nonce = randomBytes(16).toString("hex"); addressMap.set(address, nonce); return Response.json({ data: nonce }); }
Antarmuka Verifikasi Tanda Tangan
javascript export async function POST(request) { const { signature, message } = await request.json(); const { nonce, address = "0x" } = parseSiweMessage(message);
jika (!nonce || nonce !== addressMap.get(address)) { throw new Error("Invalid nonce"); }
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 }); }
Optimasi Kinerja
Untuk meningkatkan kecepatan verifikasi, disarankan untuk menggunakan layanan node khusus. Anda dapat menggunakan layanan node ZAN, menggantikan RPC default:
javascript const publicClient = createPublicClient({ rantai: mainnet, transport: http('), // Layanan RPC node ZAN });
Ini akan secara signifikan meningkatkan kecepatan respons antarmuka.