Xabar imzolash
Ilovangiz foydalanuvchidan matnli xabarni posting yoki active kaliti bilan imzolashni soʻrashi mumkin. Imzo foydalanuvchi hisobni nazorat qilishini isbotlaydi. Hech narsa tarmoqqa yuborilmaydi: xabar blokcheynga umuman tushmaydi. Hivesigner Hive Keychain'ning requestSignBuffer funksiyasi kabi imzolaydi, shuning uchun Keychain imzosini tekshiradigan server kodi Hivesigner imzosini ham tekshiradi.
Imzo soʻrang
Foydalanuvchini quyidagi soʻrov parametrlari bilan https://hivesigner.com/sign-buffer manziliga yuboring:
| Parametr | Majburiy | Maʼnosi |
|---|---|---|
message |
Ha | Imzolanadigan matnning aynan oʻzi. U boʻsh joylardan koʻproq narsani saqlashi kerak. |
redirect_uri |
Ha | Hivesigner natijani qayerga yuborishi. Qarang: Callback qoidalari. |
authority |
Yoʻq | posting yoki active, harflar katta-kichikligidan qatʼi nazar (Posting ham yaraydi). Boʻlmasa yoki boʻsh boʻlsa posting. Boshqa har qanday qiymat rad etiladi. |
client_id |
Yoʻq | Ilova hisobingiz. clientId ham oʻqiladi. U boʻlsa, redirect_uri ilovangizning callback manzillaridan biri boʻlishi kerak. |
state |
Yoʻq | Har qanday qiymat. Hivesigner uni oʻzgartirmasdan qaytaradi. |
account |
Yoʻq | Siz imzolashini kutayotgan hisob. Hivesigner u qurilmada boʻlsa uni tanlaydi, boʻlmasa eʼtiborsiz qoldiradi. select_account ham oʻqiladi. |
Har bir qiymat kodlanishi uchun manzilni URLSearchParams bilan tuzing:
const params = new URLSearchParams({
message: 'MESSAGE',
authority: 'posting',
redirect_uri: 'REDIRECT_URI',
client_id: 'CLIENT_ID',
state: 'STATE',
});
window.location.assign(`https://hivesigner.com/sign-buffer?${params}`);
Callback qoidalari
- Callback manzili
https://boʻlishi kerak. Oddiyhttp://faqat loopback'da ishlaydi:localhost,127.0.0.1yoki[::1]. client_idbilan callback manzili oʻsha ilova hisobida roʻyxatdan oʻtkazilgan boʻlishi va kirishdagi kabi solishtirilishi kerak. Qarang: Callback manzillari. Hivesigner ilovaning callback manzillarini soʻrov ochilganda Hive'dan oʻqiydi va ularni oʻqimaguncha hech narsani imzolamaydi. Hive'ga ulanib boʻlmaganda foydalanuvchi Qayta urinish tugmasini oladi.client_idsiz birinchi qoidaga mos keladigan har qanday callback manzili ishlaydi. Shunda Hivesigner soʻrovchi sifatida callback manzilining xostini koʻrsatadi, masalan «HOST sizdan xabarni imzolashni soʻramoqda.»
Ilova hisobingiz boʻlsa, client_id yuboring. Shunda foydalanuvchi ilovangizning nomi va hisobini koʻradi. Imzoni faqat roʻyxatdan oʻtkazilgan callback manzillaringiz olishi mumkin.
Hivesigner xabari yoʻq, authority qiymati nomaʼlum, callback manzili yetishmaydigan yoki yaroqsiz, client_id qiymati Hive hisobi boʻlmagan yoki callback manzili oʻsha ilovada roʻyxatdan oʻtkazilmagan soʻrovni rad etadi. Foydalanuvchi «Bu imzo soʻrovidan foydalanib boʻlmaydi: unga xabar, posting yoki active kalit va ilova uchun roʻyxatdan oʻtkazilgan xavfsiz yoʻnaltirish URL manzili kerak. Saytga qayting va qaytadan urinib koʻring.» yozuvini va Bu muammo haqida xabar berish tugmasini koʻradi.
Foydalanuvchi nimani koʻradi
- Ilovangiz nomini (yoki callback manzilining xostini) koʻrsatadigan sarlavha va «Sizni HOST manziliga yoʻnaltiradi» yozuvi.
- Butun xabar, aynan imzolanadigan koʻrinishda. Matnni yashirishi yoki uning yoʻnalishini oʻzgartirishi mumkin boʻlgan belgilar
\u{200B}kabi kodlar sifatida koʻrsatiladi. - «Posting kalitingiz bilan imzolanadi» yoki «Active kalitingiz bilan imzolanadi».
- Ogohlantirish: «Imzoingiz uni koʻrgan har kimga @USERNAME aynan shu matnni imzolaganini isbotlaydi. Faqat tushungan xabaringizni imzolang.»
- Imzolash va Bekor qilish. Qulflangan hisob avval kirish kodini soʻraydi.
Xabar imzolash soʻrovlari bu ekranni foydalanuvchilar uchun tavsiflaydi.
Callback manzilingiz nimani oladi
Foydalanuvchi Imzolash ni tanlaganda Hivesigner uni quyidagi soʻrov parametrlari bilan callback manzilingizga yuboradi:
| Parametr | Qiymat |
|---|---|
signature |
Imzo, 130 belgidan iborat oʻn oltilik satr koʻrinishida |
public_key |
Imzolagan kalitning ochiq kaliti, masalan STM... |
username |
Imzolagan hisob |
authority |
posting yoki active |
state |
Soʻrovda state boʻlgan boʻlsa, sizning qiymatingiz (boʻsh qiymat ham) |
Hivesigner ularni callback manzilingizning soʻrov qatoriga, ? yoki & dan keyin va har qanday #fragment dan oldin qoʻshadi. Sizning oʻz soʻrov qatoringiz oʻzgarmasdan qoladi.
https://YOUR_APP/signed?signature=SIGNATURE&public_key=PUBLIC_KEY&username=USERNAME&authority=posting&state=STATE
Foydalanuvchi Bekor qilish ni tanlaganda Hivesigner uning hisoblar roʻyxatini ochadi. Callback manzilingiz hech narsa olmaydi.
Ogohlantirish: har kim callback manzilingizni oʻylab topilgan qiymatlar bilan ocha oladi. Serveringiz imzoni tekshirmaguncha har bir parametrni shunchaki daʼvo deb bilib turing.
Imzoni tekshiring
Imzoni serveringizda tekshiring:
- Siz soʻragan xabarni
stateqiymati bilan birga serveringizda saqlang. Brauzerdan qaytib kelgan nusxaga ishonmang. - Xabarning xeshini hisoblang: uning UTF-8 baytlari ustidan sha256.
- Ochiq kalitni imzodan va oʻsha xeshdan tiklang.
- Hisobni Hive'dan yuklang. Tiklangan kalit siz soʻragan vakolatga tegishli ekanini va yolgʻiz imzolashga yetarli ogʻirlikka ega ekanini tekshiring.
statesiz bergan qiymat ekanini tekshiring. Har bir xabarni bir marta qabul qiling.
Bu misolda dhive (https://www.npmjs.com/package/@hiveio/dhive) ishlatiladi:
import { Client, Signature, cryptoUtils } from '@hiveio/dhive';
const hive = new Client(['https://api.hive.blog']);
// message and authority: what you asked for, from your own records.
// signature and username: from the callback.
export async function verifySignBuffer({ message, authority, signature, username }) {
let recovered;
try {
const hash = cryptoUtils.sha256(message); // sha256 over the UTF-8 bytes
recovered = Signature.fromString(signature).recover(hash).toString();
} catch {
return false; // not a valid signature
}
const [account] = await hive.database.getAccounts([username]);
if (!account) return false;
const auth = account[authority]; // 'posting' or 'active'
return auth.key_auths.some(
([key, weight]) => key === recovered && weight >= auth.weight_threshold,
);
}
Xuddi shu tekshiruv Hive Keychain'ning requestSignBuffer funksiyasidan kelgan imzo uchun ham ishlaydi. Oʻzingiz tiklagan kalit bilan solishtiring: callback'dagi public_key faqat ishoradir.
Hivesigner imzolamaydigan xabarlar
signed_message kalitiga ega JSON obyekti boʻlgan xabar Hivesigner tokeni shaklida boʻladi. Uni imzolash soʻrovchiga foydalanuvchi hisobiga kirish huquqini berardi. Hivesigner bunday xabarni hech qachon imzolamaydi. U foydalanuvchiga «Bu xabar Hivesigner tokeni. Uni imzolash saytga hisobingizga kirish huquqini beradi, shuning uchun uni imzolab boʻlmaydi.» deb aytadi.
Oddiy matndan yoki signed_message kaliti yoʻq JSON'dan foydalaning. Imzo nima uchun kerakligini yozing va bir marta yaratadigan qiymatni qoʻshing, masalan:
Confirm your account for YOUR_APP
Account: USERNAME
Nonce: NONCE
Xabarni imzolash vositasi
Odamlar xabarni https://hivesigner.com/signmessage sahifasida oʻzlari ham imzolashi (Xabarni imzolash) va https://hivesigner.com/verifymessage sahifasida uni tekshirishi (Xabarni tekshirish) mumkin. Qarang: Xabarni oʻzingiz imzolang.
Oʻsha vosita /sign-buffer dan boshqacha imzolaydi. U xabar, hisob va vaqtni saqlaydigan Hivesigner token tanasini imzolaydi. Natijani esa Tekshirish tokeni sifatida ulashadi. Bunday tokenni Xabarni tekshirish sahifasida yoki Oʻzingiz tekshiring boʻlimida tavsiflanganidek tekshiring, yuqoridagi kod bilan emas.