SIWE (Ethereum ile Giriş) Ethereum üzerinde kullanıcı kimliğini doğrulamanın bir yoludur, işlem başlatmaya benzer, kullanıcının cüzdan üzerindeki kontrolünü kanıtlar. Şu anda çoğu cüzdan eklentisi bu basit imzalama yöntemini desteklemektedir.
Bu makale, Ethereum üzerindeki imza senaryolarını tartışmakta olup, diğer halka açık blok zincirlerini içermemektedir.
Projenizin SIWE'ye ihtiyacı var mı?
Eğer Dapp'inizin aşağıdaki ihtiyaçları varsa, SIWE kullanmayı düşünebilirsiniz:
Kendi kullanıcı sistemine sahip olmak
Kullanıcı gizliliği ile ilgili bilgileri sorgulamak gerekiyor.
Ana olarak sorgulama işlevi sunan Dapp( için etherscan), SIWE kullanılmayabilir.
Cüzdan bağlandıktan sonra ön uç kimliği doğrulayabilse de, arka uç desteği gerektiren API çağrıları için yalnızca adres ile kimlik kanıtı sağlanamaz, çünkü adres kamuya açık bir bilgidir.
SIWE'nin Prensibi ve Süreci
SIWE süreci üç aşamadan oluşur: cüzdanı bağlama, imzalama, TANIMLAMA alma.
Cüzdanı Bağla
Bu yaygın bir Web3 işlemi, cüzdan eklentisi aracılığıyla Dapp'a bağlanmaktır.
İMZA
SIWE'nin imzalama adımları şunlardır:
Nonce değerini al: Rastgele Nonce değerini almak için arka uç API'sini çağırın, adresle ilişkilendirin.
İmza içeriği oluşturma: Nonce değeri, alan adı, zincir ID'si gibi bilgileri içerir.
Cüzdan imzası: İçeriği imzalamak için cüzdanın sağladığı yöntemi kullanın.
İmza gönderme: İmza, arka uca doğrulama için gönderilir.
TANIMLAMA almak
Arka uç doğrulama imzası geçtikten sonra, kullanıcı tanımlayıcısı ( gibi JWT) döner. Sonraki talepler, adres ve tanımlayıcıyı taşıyarak cüzdan sahipliğini kanıtlayabilir.
Uygulama SIWE
Next.js kullanarak SIWE destekleyen bir tam yığın uygulama geliştireceğiz.
Doğrulama hızını artırmak için özel bir düğüm hizmeti kullanılması önerilir. Varsayılan RPC'yi değiştirmek için ZAN'ın düğüm hizmetini kullanabilirsiniz:
javascript
const publicClient = createPublicClient({
zincir: ana ağ,
taşıma: http('), // ZAN düğüm hizmeti RPC
});
Bu, arayüz yanıt hızını önemli ölçüde artıracaktır.
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.
8 Likes
Reward
8
6
Share
Comment
0/400
BTCRetirementFund
· 12h ago
Gerçekten anlamıyorum, SIWE nedir bu?
View OriginalReply0
LightningLady
· 12h ago
Bu arka uç kullanılmıyor mu? SIWE güzel değil mi?
View OriginalReply0
SatoshiNotNakamoto
· 12h ago
Bu, imza ile giriş yapmaktan başka bir şey değil, neden bu kadar havalı yapıyorsunuz ki?
View OriginalReply0
MevShadowranger
· 12h ago
Ah, bu, web2'deki o tuzak değil mi? Blok Zinciri'ne bir kaplama yapmak.
View OriginalReply0
MEVSandwich
· 12h ago
Hmm, görünüşe göre ETH ekosisteminin arka uç doğrulaması oldukça zor.
View OriginalReply0
AirdropLicker
· 12h ago
Ah bu imza ile de oyun oynanır, öğrendim öğrendim.
SIWE: Ethereum TANIMLAMA's Dapp tam yığın uygulama kılavuzu
SIWE: Dapp için TANIMLAMA sağlayan güçlü araç
SIWE (Ethereum ile Giriş) Ethereum üzerinde kullanıcı kimliğini doğrulamanın bir yoludur, işlem başlatmaya benzer, kullanıcının cüzdan üzerindeki kontrolünü kanıtlar. Şu anda çoğu cüzdan eklentisi bu basit imzalama yöntemini desteklemektedir.
Bu makale, Ethereum üzerindeki imza senaryolarını tartışmakta olup, diğer halka açık blok zincirlerini içermemektedir.
Projenizin SIWE'ye ihtiyacı var mı?
Eğer Dapp'inizin aşağıdaki ihtiyaçları varsa, SIWE kullanmayı düşünebilirsiniz:
Ana olarak sorgulama işlevi sunan Dapp( için etherscan), SIWE kullanılmayabilir.
Cüzdan bağlandıktan sonra ön uç kimliği doğrulayabilse de, arka uç desteği gerektiren API çağrıları için yalnızca adres ile kimlik kanıtı sağlanamaz, çünkü adres kamuya açık bir bilgidir.
SIWE'nin Prensibi ve Süreci
SIWE süreci üç aşamadan oluşur: cüzdanı bağlama, imzalama, TANIMLAMA alma.
Cüzdanı Bağla
Bu yaygın bir Web3 işlemi, cüzdan eklentisi aracılığıyla Dapp'a bağlanmaktır.
İMZA
SIWE'nin imzalama adımları şunlardır:
Nonce değerini al: Rastgele Nonce değerini almak için arka uç API'sini çağırın, adresle ilişkilendirin.
İmza içeriği oluşturma: Nonce değeri, alan adı, zincir ID'si gibi bilgileri içerir.
Cüzdan imzası: İçeriği imzalamak için cüzdanın sağladığı yöntemi kullanın.
İmza gönderme: İmza, arka uca doğrulama için gönderilir.
TANIMLAMA almak
Arka uç doğrulama imzası geçtikten sonra, kullanıcı tanımlayıcısı ( gibi JWT) döner. Sonraki talepler, adres ve tanımlayıcıyı taşıyarak cüzdan sahipliğini kanıtlayabilir.
Uygulama SIWE
Next.js kullanarak SIWE destekleyen bir tam yığın uygulama geliştireceğiz.
HAZIRLIK
npx create-next-app@14
npm install antd @ant-design/web3 @ant-design/web3-wagmi wagmi viem @tanstack/react-query --save
Wagmi'yi tanıtmak
layout.tsx dosyasına WagmiProvider'ı dahil et:
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) =\u003e { const jwt = (await verifyMessage(message, signature)).data; setJwt(jwt); return !!jwt; }, }, zincirler: [Mainnet], taşıma: { [Ana ağ.id]: http(), }, cüzdanlar: [MetaMask(), WalletConnect(), TokenPocket(), OkxWallet()] }} > {children} ); };
BAĞLANTI DÜĞMESİ EKLE
Cüzdanı bağlamak ve imzalamak için bir buton oluşturun:
jsx varsayılan dışa aktarma işlevi App() { const jwt = React.useContext(JwtProvider);
return ( <connectbutton.connector> {({ hesap, bağlan }) => ( )} </connectbutton.connector> ); }
Arka uç arayüzü gerçekleştirme
Nonce arayüzü
javascript export async function GET(request) { const { searchParams } = new URL(request.url); const address = searchParams.get("address");
eğer (!address) { throw new Error("Geçersiz adres"); } const nonce = randomBytes(16).toString("hex"); addressMap.set(address, nonce); return Response.json({ data: nonce }); }
İMZA DOĞRULAMA ARAYÜZÜ
javascript export async function POST(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, });
if (!valid) { throw new Error("Geçersiz imza"); }
const token = jwt.sign({ address }, JWT_SECRET, { expiresIn: "1saat" }); return Response.json({ data: token }); }
Performans Optimizasyonu
Doğrulama hızını artırmak için özel bir düğüm hizmeti kullanılması önerilir. Varsayılan RPC'yi değiştirmek için ZAN'ın düğüm hizmetini kullanabilirsiniz:
javascript const publicClient = createPublicClient({ zincir: ana ağ, taşıma: http('), // ZAN düğüm hizmeti RPC });
Bu, arayüz yanıt hızını önemli ölçüde artıracaktır.