SIWE: Ethereum imza tabanlı Dapp kimlik doğrulama yeni paradigması

SIWE: Ethereum imzasını kullanarak daha güçlü Dapp TANIMLAMA

SIWE(Ethereum ile Giriş Yap), kullanıcıların kimliğini Ethereum üzerinde doğrulamanın bir yoludur, işlem başlatmaya benzer, kullanıcının cüzdan üzerindeki kontrolünü kanıtlamak için kullanılır. Şu anda çoğu cüzdan eklentisi bu basit imza doğrulama yöntemini desteklemektedir.

SIWE ne zaman kullanılmalıdır?

Eğer Dapp'iniz aşağıdaki gereksinimlere sahipse, SIWE kullanmayı düşünebilirsiniz:

  • Bağımsız bir kullanıcı sistemi olmak
  • Kullanıcı gizliliği ile ilgili bilgi sorgulanması gerekiyor

Sorgulama odaklı uygulamalar için (, etherscan) gibi, SIWE kullanmaya gerek yoktur.

Dapp ön yüzünde cüzdan bağlandığında kimliği gösterebilse de, arka uç desteği gerektiren API çağrıları için yalnızca adresin iletilmesi yeterli değildir; çünkü adres kamuya açık bir bilgidir ve kötüye kullanılmaya açıktır.

SIWE Kullanım Kılavuzu: Dapp'inizi Nasıl Daha Güçlü Hale Getirirsiniz?

SIWE'nin Prensibi ve Süreci

SIWE'nin temel süreci üç adımdan oluşur: cüzdan bağlama, imzalama, kimlik belirleme alma.

cüzdanı bağla

Kullanıcı cüzdanını Dapp'te cüzdan eklentisi aracılığıyla bağlayın.

imza

İmza adımları şunlardır:

  1. Nonce değerini al: Rastgele oluşturulan Nonce değerini almak için arka uç API'sini çağırın.
  2. İmza içeriğini oluşturma: Nonce değeri, alan adı, zincir ID'si gibi bilgileri içerir.
  3. Cüzdanı kullanarak imzalama
  4. İmza, arka uca doğrulama için gönderilir

TANIMLAMA almak

Arka uç imza doğrulaması geçtiğinde, kullanıcı tanımlayıcısı ( ve JWT) döner. Daha sonra, ön uç isteği sırasında adres ve tanımlayıcıyı taşır, böylece cüzdanın sahipliğini kanıtlayabilir.

SIWE Kullanım Kılavuzu: Dapp'inizi Nasıl Daha Güçlü Hale Getirirsiniz?

Pratik SIWE

Aşağıda, projede SIWE'nin nasıl uygulanacağını tanıtıyoruz, hedef Dapp'in kullanıcı kimlik doğrulaması için JWT döndürebilmesidir.

hazırlık çalışmaları

Bu makale, Next.js kullanarak tam yığın uygulama geliştirmek için Node.js ortamının hazırlanması gerektiğini belirtiyor.

Bağımlılıkları Yükle

Öncelikle Next.js'i kurun:

npx create-next-app@14

Proje dizinine girin ve çalıştırın:

npm run dev

localhost:3000 adresine giderek temel bir Next.js projesini görebilirsiniz.

SIWE ile ilgili bağımlılıkları yükleyin

Ant Design Web3 kullanarak cüzdan bağlantısı kurma:

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

SIWE Kullanım Kılavuzu: Dapp'inizi Nasıl Daha Güçlü Hale Getirirsiniz?

Wagmi'yi tanıtmak

layout.tsx dosyasına WagmiProvider'ı ekleyin:

jsx "client kullan"; import { getNonce, verifyMessage } from "@/app/api"; import { Ana Ağ, MetaMask, OkxWallet, TokenPocket, WagmiWeb3ConfigProvider, WalletConnect, } "@ant-design/web3-wagmi"'dan; import { QueryClient } from "@tanstack/react-query"; import React from "react"; import { createSiweMessage } from "viem/siwe"; import { http } from "wagmi";

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={{ projeId: YOUR_WALLET_CONNECT_PROJECT_ID, }} cüzdanlar={[ MetaMask(), WalletConnect(), TokenPocket({ grup: "Popüler", }), OkxWallet(), ]} queryClient={queryClient} > {children} ); };

varsayılan olarak WagmiProvider'ı dışa aktar

SIWE Kullanım Kılavuzu: Dapp'inizi nasıl daha güçlü hale getirebilirsiniz?

bağlantı düğmesini gerçekleştir

jsx "client kullan"; import type { Account } from "@ant-design/web3"; import { ConnectButton, Connector } from "@ant-design/web3"; import { Flex, Space } from "antd"; import React from "react";

varsayılan dışa aktarma işlevi App() { const jwt = React.useContext(JwtProvider);

const renderSignBtnText = ( defaultDom: React.ReactNode, hesap?: Hesap ) => { const { address } = account ?? {}; const ellipsisAddress = address ? ${address.slice(0, 6)}...${address.slice(-6)} : ""; ${ellipsisAddress} olarak oturum açmayı geri döndür. };

return ( <>

JWT: {jwt}
); }

SIWE Kullanım Kılavuzu: Dapp'inizi Nasıl Daha Güçlü Hale Getirirsiniz?

Arayüz Uygulaması

Nonce arayüzü

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");

if (!address) { throw new Error("Geçersiz adres"); } const nonce = randomBytes(16).toString("hex"); addressMap.set(address, nonce); Response.json({ veri: nonce, }); }

Doğrulama İmza Arayüzü

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

const JWT_SECRET = "your-secret-key";

const publicClient = createPublicClient({ zincir: ana ağ, taşıma: http(), });

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

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

eğer (!nonce || nonce !== addressMap.get(address)) { throw new Error("Geçersiz nonce"); }

const valid = await publicClient.verifySiweMessage({ mesaj, adres, imza, });

eğer (!valid) { throw new Error("Geçersiz imza"); }

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

SIWE Kullanım Kılavuzu: Dapp'inizi nasıl daha güçlü hale getirebilirsiniz?

Optimizasyon Önerileri

Doğrulama hızını artırmak için, varsayılan RPC'yi değiştirmek amacıyla özel bir düğüm hizmeti kullanmanız önerilir. Örneğin, ZAN düğüm hizmetini kullanabilirsiniz:

javascript const publicClient = createPublicClient({ zincir: ana ağ, taşıma: http('), //ZAN düğüm hizmeti RPC });

Bu, doğrulama süresini önemli ölçüde azaltabilir ve arayüz hızını artırabilir.

SIWE Kullanım Kılavuzu: Dapp'inizi Nasıl Daha Güçlü Hale Getirirsiniz?

View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Reward
  • 6
  • Share
Comment
0/400
OfflineNewbievip
· 07-12 04:32
İmza doğrulama oldukça gelişmiş, ama gizli anahtarı unutursanız iş biter.
View OriginalReply0
BearMarketBrovip
· 07-12 04:31
Tamam, bir TANIMLAMA daha. Büyük boğa bekliyor.
View OriginalReply0
BuyHighSellLowvip
· 07-12 04:30
Ne zaman BTC'ye dönüşecek?
View OriginalReply0
SnapshotLaborervip
· 07-12 04:25
Beyaz kağıda siyah mürekkeple imza at, rahat ol.
View OriginalReply0
consensus_failurevip
· 07-12 04:24
İmza atmak giderek daha zor hale geliyor, daha ne kadar sürecek?
View OriginalReply0
SchrödingersNodevip
· 07-12 04:14
Ben bir Madenci'yim, imzayı çözebilen kalbimi de çözebilir.
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)