SIWE: دليل الممارسة الشاملة لبناء تطبيقات لامركزية للتحقق من الهوية على إثيريوم

SIWE: أداة قوية للتحقق من الهوية لـ Dapp

SIWE (تسجيل الدخول باستخدام إيثيريوم) هي طريقة للتحقق من هوية المستخدمين على إيثيريوم، مشابهة لإجراء المعاملات، حيث تثبت السيطرة على المحفظة. في الوقت الحالي، تدعم معظم إضافات المحفظة هذه الطريقة البسيطة للتوقيع.

تتناول هذه المقالة مشهد التوقيع على الإيثيريوم ، ولا تتعلق بسلاسل الكتل العامة الأخرى.

دليل استخدام SIWE: كيف تجعل Dapp الخاص بك أكثر قوة؟

هل يحتاج مشروعك إلى SIWE؟

إذا كان لدى تطبيقك اللامركزي المتطلبات التالية، يمكنك التفكير في استخدام SIWE:

  • امتلاك نظام مستخدم خاص به
  • يحتاج إلى استعلام عن المعلومات المتعلقة بخصوصية المستخدم

بالنسبة لتطبيقات Dapp( التي تقدم وظيفة الاستعلام الرئيسية مثل etherscan)، يمكن عدم استخدام SIWE.

على الرغم من أنه يمكن للواجهة الأمامية تأكيد التعريف بالهوية بعد توصيل المحفظة، إلا أن استدعاءات واجهة برمجة التطبيقات التي تتطلب دعمًا من الخلفية لا يمكن أن تثبت التعريف بالهوية فقط من خلال تمرير العنوان، لأن العنوان هو معلومات عامة.

مبدأ SIWE والعملية

تتضمن عملية SIWE ثلاث خطوات: ربط المحفظة، التوقيع، والحصول على التعريف بالهوية.

ربط المحفظة

هذا هو إجراء شائع في Web3، يتم الاتصال بـ Dapp من خلال مكون إضافي للمحفظة.

توقيع

خطوات توقيع SIWE تشمل:

  1. الحصول على قيمة Nonce: استدعاء واجهة برمجة التطبيقات الخلفية للحصول على قيمة Nonce عشوائية مرتبطة بالعنوان.

  2. بناء محتوى التوقيع: يشمل قيمة Nonce، اسم النطاق، معرف السلسلة وغيرها من المعلومات.

  3. توقيع المحفظة: استخدم الطريقة التي توفرها المحفظة لتوقيع المحتوى.

  4. إرسال التوقيع: إرسال التوقيع للتحقق من قبل الواجهة الخلفية.

الحصول على التعريف بالهوية

بعد التحقق من صحة توقيع الخلفية، يتم إرجاع معرف هوية المستخدم ( مثل JWT ). يمكن إثبات ملكية المحفظة عن طريق الطلبات اللاحقة التي تحمل العنوان ومعرف الهوية.

دليل استخدام SIWE: كيف تجعل تطبيقك أكثر قوة؟

ممارسة SIWE

سنقوم بتطوير تطبيق كامل باستخدام Next.js يدعم SIWE.

العمل التحضيري

  1. تثبيت Next.js:

npx create-next-app@14

  1. تثبيت الاعتماديات الخاصة بـ SIWE:

npm تثبيت antd @ant-design/web3 @ant-design/web3-wagmi wagmi viem @tanstack/react-query --save

إدخال Wagmi

قدم WagmiProvider في layout.tsx:

جي إس إكس استيراد { WagmiWeb3ConfigProvider } من "@ant-design / web3-wagmi" ؛

const WagmiProvider = ({ children }) = > { ( الإرجاع <wagmiweb3configprovider config="{{" siwe:="" {="" getnonce:="" async="" (address)=""> (await getNonce(address)).data, createMessage: (props) => createSiweMessage({ ... الدعائم ، بيان: "Ant Design Web3" }) ، verifyMessage: (message غير متزامن، signature) = > { const jwt = (await verifyMessage(message, signature)).data; setJwt(jwt). أعاد!! JWT. }, }, السلاسل: [Mainnet], وسائل النقل: { [Mainnet.id]: http()، }, المحافظ: [MetaMask() ، WalletConnect() ، TokenPocket() ، OkxWallet()] }} > {أطفال} ); };

SIWE دليل المستخدم: كيف تجعل تطبيقك اللامركزي أقوى؟

إضافة زر الاتصال

إنشاء زر لربط المحفظة والتوقيع:

جي إس إكس تصدير الدالة الافتراضية App() { const jwt = React.useContext(JwtProvider);

( الإرجاع <connectbutton.connector> {({ الحساب، الاتصال }) => ( < زر onclick="{connect}"> {حساب ؟ متصل: ${account.address.slice(0,6)}...${account.address.slice(-4)} : "Connect Wallet"} )} </connectbutton.connector> ); }

دليل استخدام SIWE: كيف تجعل تطبيقك أكثر قوة؟

تنفيذ واجهة برمجة التطبيقات الخلفية

واجهة Nonce

جافا سكريبت تصدير الدالة غير المتزامنة GET(request) { const { searchParams } = عنوان URL الجديد(request.url); const address = searchParams.get( "address");

إذا (!address) { throw new Error("عنوان غير صالح"); } const nonce = randomBytes(16).toString("hex"); addressMap.set(العنوان, nonce); إرجاع Response.json({ data: nonce }); }

دليل استخدام SIWE: كيف تجعل Dapp الخاص بك أكثر قوة؟

واجهة توقيع التحقق

جافا سكريبت تصدير الدالة غير المتزامنة POST(request) { const { التوقيع, الرسالة } = await request.json(); const { nonce ، العنوان = "0x" } = parseSiweMessage(message) ؛

إذا (!nonce || nonce !== addressMap.get(address)) { رمي Error( جديد "غير صالح") ؛ }

const valid = await publicClient.verifySiweMessage({ رسالة، العنوان، توقيع، });

إذا (!valid) { throw new Error("توقيع غير صالح"); }

رمز const = jwt.sign({ address }, JWT_SECRET, { expiresIn: "1h" }); إرجاع Response.json({ data: token }); }

دليل استخدام SIWE: كيف تجعل تطبيقك أكثر قوة؟

تحسين الأداء

لزيادة سرعة التحقق، يُوصى باستخدام خدمات العقد المتخصصة. يمكنك استخدام خدمة عقد ZAN، بدلاً من RPC الافتراضي:

جافا سكريبت const publicClient = createPublicClient({ السلسلة: الشبكة الرئيسية, النقل: http('), // خدمة ZAN عقد RPC });

سيؤدي ذلك إلى تحسين كبير في سرعة استجابة واجهة المستخدم.

SIWE دليل الاستخدام: كيف تجعل تطبيقك أقوى؟

ETH-4.63%
DAPP2.13%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 6
  • مشاركة
تعليق
0/400
BTCRetirementFundvip
· منذ 16 س
لا أفهم حقًا ما هو SIWE هذا.
شاهد النسخة الأصليةرد0
LightningLadyvip
· منذ 16 س
هل لا تحتاج حتى إلى هذا الجزء الخلفي؟ ألا يبدو SIWE جذاباً؟
شاهد النسخة الأصليةرد0
SatoshiNotNakamotovip
· منذ 16 س
أليس هذا هو تسجيل الدخول بالتوقيع؟ لماذا يبدو معقدًا جدًا؟
شاهد النسخة الأصليةرد0
MevShadowrangervip
· منذ 16 س
آه، أليس هذا هو نفس الفخ الذي كان في web2، لكن للبلوكتشين؟
شاهد النسخة الأصليةرد0
MEVSandwichvip
· منذ 16 س
嗯 يبدو أن التحقق من البنية التحتية لـ ETH في النظام البيئي لا يزال معقدًا بعض الشيء.
شاهد النسخة الأصليةرد0
AirdropLickervip
· منذ 16 س
آه، يمكن أن تكون التوقيعات ممتعة. لقد تعلمت، لقد تعلمت.
شاهد النسخة الأصليةرد0
  • تثبيت