Tutorial: Masuk ke Aplikasi Web dengan Steem Keychain

in #steem6 years ago

.png

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 ke login / steem_keychain.
  • [SERVER] Enkripsikan nama pengguna dengan algoritme symetric-key (seperti AES) untuk mendapatkan encrypted_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 mendapatkan encrypted_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) ke login / steem_keychain / callback.
  • SERVER] Dekripsi encrypted_username menggunakan rahasia pribadi yang tersimpan (AES) untuk mendapatkan nama 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:

Versi 1.0
Versi 1.1


View this post on Steeve

Sort:  

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.

Congratulations @steeve-id! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You got your First payout

Click here to view your Board of Honor
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @steeve-id! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You made your First Vote

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:

Saint Nicholas challenge for good boys and girls

Support SteemitBoard's project! Vote for its witness and get one more award!