Ketika saya memutuskan untuk mengintegrasikan Steem Keychain dengan @steeveapp, tidak jelas bagi saya bagaimana membangun sesi pengguna dengan server, bagaimana cara memasukkan pengguna. Saya menghabiskan waktu untuk meneliti dan berpikir, jadi saya memutuskan untuk menulis bagaimana saya melakukannya pada akhirnya dan membaginya dengan yang lain.
Menjadi Detektif
Pada awalnya, ketika saya menerapkan otentikasi dengan SteemConnect, situasinya cukup jelas. Anda bertanya SteemConnect dan Anda mendapatkan token yang dapat Anda gunakan untuk memverifikasi identitas Steem pengguna. Tapi tidak ada yang seperti itu dengan Steem Keychain, tidak ada token, belum lagi hanya beberapa metode yang diekspor yang ada pada saat saya mulai memeriksa ekstensi.
Bagaimanapun, ketika membaca sekilas melalui README di GitHub, saya menemukan bagian yang disebut Decode Memo/Verify Key, yang mengatakan bahwa requestVerifyKey
dapat digunakan untuk login pengguna. Tidak ada detail lain di sana, jadi meskipun saya tahu apa yang seharusnya saya gunakan, saya tidak tahu apa yang harus dilakukan. Bagaimana cara memverifikasi identitas pengguna di server?
Aliran Otentikasi
Aliran yang saya temukan ternyata lucu bagi saya karena menggabungkan bertukar memo terenkripsi antara server dan aplikasi web seolah-olah mereka sedang melakukan percakapan Steem yang terenkripsi satu sama lain.
Jadi, inilah yang saya dapatkan, selangkah demi selangkah:
- [APP] Minta pengguna untuk memasukkan nama pengguna Steem mereka.
- [APP] Post
nama
pengguna kelogin / steem_keychain.
- [SERVER] Enkripsikan
nama
pengguna dengan algoritme symetric-key (seperti AES) untuk mendapatkanencrypted_username.
Ini membutuhkan rahasia untuk dipersiapkan sebelumnya dan disimpan di server, yang tidak terkait dengan penandatanganan token JWT atau blockchain. - [SERVER] Ambil kunci memo publik pengguna yang diberikan oleh blockchain.
- [SERVER] Enkripsikan
encrypted_username
menggunakan kunci memo publik untuk mendapatkanencrypted_memo
dan mengembalikannya dalam tanggapan. - [APP] Minta Steem Keychain untuk mendekripsi
encrypted_memo
yang diterima menggunakan kunci memo pribadi yang tersimpan. - [APP] Posting memo yang didekripsi
(encrypted_username)
kelogin / steem_keychain / callback.
- SERVER] Dekripsi
encrypted_username
menggunakan rahasia pribadi yang tersimpan (AES) untuk mendapatkannama pengguna.
- SERVER] Hasilkan token JWT untuk nama pengguna yang diberikan. Kembalikan dalam tanggapan.
- [APP] Simpan token JWT yang dikembalikan. Sesi ini dibuat.
Seperti jelas, seluruh alur bekerja jika pengguna berhasil mendekripsi pesan menggunakan kunci memo pribadi mereka, yang merupakan langkah memverifikasi Steem mengidentifikasi. Aplikasi web tidak dapat mengacaukan apa yang diterima dari server karena dienkripsi dan rahasianya disimpan di server saja.
Alasan mengapa token JWT itu sendiri kembali karena encrypted_memo
adalah bahwa kita memerlukan aplikasi web untuk melakukan ping server kembali, membiarkannya tahu bahwa sesi dibuat jika ada logika yang diperlukan untuk dieksekusi.
Jadi apa yang Anda pikirkan? Apakah bisa dilakukan dengan cara yang berbeda atau lebih sederhana?
EDIT: Ada cara yang lebih sederhana ketika menggunakan requestSignBuffer, yang merupakan panggilan API yang tidak tersedia ketika saya menerapkan ini untuk Steeve.
Steem Keychain untuk Angular
Saat menerapkan ini untuk @steeveapp, saya memutuskan untuk mengubah upaya saya menjadi modul Sudut publik yang dapat digunakan siapa saja untuk mulai bekerja dengan Steem Keychain dengan cepat. Semua hujan es ngx-steem-keychain
Note Posting ini di terjemahkan dari posting yang di bagikan oleh @void dan sudah mendapatkan persetujuan darinya, @void merupakan salah satu pengembang Steeve
@void juga memposting pembaruan secara teratur menggunakan Utopian:
Congratulations! This post has been upvoted from the communal account, @minnowsupport, by ziapase from the Minnow Support Project. It's a witness project run by aggroed, ausbitbank, teamsteem, someguy123, neoxian, followbtcnews, and netuoso. The goal is to help Steemit grow by supporting Minnows. Please find us at the Peace, Abundance, and Liberty Network (PALnet) Discord Channel. It's a completely public and open space to all members of the Steemit community who voluntarily choose to be there.
If you would like to delegate to the Minnow Support Project you can do so by clicking on the following links: 50SP, 100SP, 250SP, 500SP, 1000SP, 5000SP.
Be sure to leave at least 50SP undelegated on your account.
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @steeve-id! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word
STOP
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit
Congratulations @steeve-id! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @steemitboard:
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit