Bagi mereka yang membangun RESTful APIs dan aplikasi JS front-end di Go, bagaimana Anda mengelola otentikasi? Apakah Anda menggunakan perpustakaan atau teknik tertentu?
Saya terkejut menemukan begitu sedikit diskusi tentang ini. Saya ingat jawaban seperti berikut, dan saya berusaha menghindari mengembangkan implementasi saya sendiri:
Formulir Otentikasi di ASP.Net
Apakah semua orang mengkode solusi mereka sendiri, secara terpisah?
authentication
go
SexxLuthor
sumber
sumber
Jawaban:
Pertanyaan ini mendapatkan banyak pandangan - dan memiliki lencana Pertanyaan Populer - jadi saya tahu ada banyak minat laten dalam topik ini, dan banyak orang menanyakan hal yang persis sama dan tidak menemukan jawaban pada Jalinan.
Sebagian besar informasi yang tersedia menghasilkan padanan teks dari hal yang bergelombang tangan, dibiarkan sebagai "latihan untuk pembaca." ;)
Namun saya akhirnya menemukan satu contoh nyata, (dengan murah hati) disediakan oleh anggota milis golang-kacang:
https://groups.google.com/forum/#!msg/golang-nuts/GE7a_5C5kbA/fdSnH41pOPYJ
Ini memberikan skema yang disarankan dan implementasi sisi server sebagai dasar untuk otentikasi kustom. Kode sisi klien masih terserah Anda.
(Saya harap penulis posting melihat ini: Terima kasih!)
Dikutip (dan diformat ulang):
"Saya akan menyarankan sesuatu seperti desain berikut:
sumber
Solusi lain yang mungkin adalah Authboss , baru-baru ini mengumumkan pada mailing daftar .
(Saya belum mencoba menggunakan perpustakaan ini.)
Lihat juga Cara terbaik untuk membuat aplikasi web dengan auth pengguna?
sumber
Anda akan menggunakan middleware untuk melakukan otentikasi.
Anda dapat mencoba go-http-auth untuk otentikasi dasar dan intisari dan gomniauth untuk OAuth2.
Tetapi cara mengautentikasi sangat tergantung pada aplikasi Anda.
Otentikasi memperkenalkan status / konteks ke dalam http.Handlers Anda dan telah ada beberapa diskusi tentang itu akhir-akhir ini.
Solusi yang terkenal untuk masalah konteks adalah gorilla / konteks dan konteks google yang dijelaskan di sini .
Saya membuat solusi yang lebih umum tanpa perlu negara global dalam go-on / wrap yang dapat digunakan bersama atau tanpa dua lainnya dan terintegrasi dengan baik dengan middleware konteks gratis.
wraphttpauth menyediakan integrasi go-http-auth dengan go-on / wrap.
sumber
go-http-auth
ataugomniauth
keduanya?Menjawab ini pada 2018. Saya sarankan menggunakan JWT (JSON Web Token). Jawaban yang Anda tandai dipecahkan memiliki kelemahan, yang merupakan perjalanan yang dilakukan di depan (pengguna) dan belakang (server / db). Yang lebih parah jika pengguna sering melakukan permintaan yang membutuhkan auth, akan mengakibatkan permintaan membengkak dari / ke server dan database. Untuk mengatasi ini gunakan JWT yang menyimpan token di sisi pengguna yang dapat digunakan oleh pengguna kapan saja ia membutuhkan akses / permintaan. Tidak perlu perjalanan ke database dan pemrosesan server untuk memeriksa validitas token membutuhkan waktu singkat.
sumber
Paket open source lain untuk menangani otentikasi dengan cookie adalah httpauth .
(Ngomong-ngomong, saya menulis)
sumber
Jujur, ada banyak metode dan teknik otentikasi yang dapat Anda pasang ke aplikasi Anda dan itu tergantung pada logika dan persyaratan bisnis aplikasi.
Misalnya Oauth2, LDAP, otentikasi lokal, dll.
Jawaban saya mengasumsikan Anda mencari otentikasi lokal yang berarti Anda mengelola identitas pengguna dalam aplikasi Anda. Server harus mengekspos satu set API eksternal memungkinkan pengguna dan admin Mengelola akun dan bagaimana mereka ingin mengidentifikasi diri mereka ke Server untuk mencapai komunikasi yang dapat dipercaya. Anda akhirnya akan membuat tabel DB yang menyimpan informasi pengguna. tempat kata sandi di-hash untuk tujuan keamanan Lihat Cara menyimpan kata sandi di dalam basis data
mari asumsikan persyaratan aplikasi untuk mengautentikasi pengguna berdasarkan salah satu metode berikut:
otentikasi dasar (nama pengguna, kata sandi):
Metode auth ini tergantung pada kredensial pengguna yang ditetapkan dalam header Otorisasi yang dikodekan dalam base64 dan didefinisikan dalam rfc7617 , pada dasarnya ketika aplikasi menerima pengguna meminta decode otorisasi dan re-hash password untuk membandingkannya dalam DB hash jika cocok dengan yang diautentikasi oleh pengguna, jika tidak kembalikan kode status 401 ke pengguna.
otentikasi berbasis sertifikat:
Metode auth ini bergantung pada Digital Certificate untuk mengidentifikasi pengguna, dan itu dikenal sebagai auth x509, jadi ketika aplikasi menerima permintaan pengguna itu membaca sertifikat klien dan memverifikasinya yang cocok dengan sertifikat CA Root yang disediakan ke APP.
bearer token:
Metode auth ini tergantung pada token Access yang berumur pendek, Token token adalah string samar, biasanya dihasilkan oleh server sebagai respons terhadap permintaan login. jadi ketika aplikasi menerima permintaan pengguna itu membaca otorisasi dan memvalidasi token untuk mengotentikasi pengguna.
Namun, saya akan merekomendasikan go-guardian untuk pustaka otentikasi yang dilakukannya melalui serangkaian metode otentikasi yang dikenal sebagai strategi. pada dasarnya Go-Guardian tidak me-mount rute atau mengasumsikan skema database tertentu, yang memaksimalkan fleksibilitas dan memungkinkan keputusan dibuat oleh pengembang.
Menyiapkan go-wali authenticator sangat mudah.
Berikut contoh lengkap metode di atas.
Pemakaian:
Anda dapat mengaktifkan beberapa metode otentikasi sekaligus. Anda biasanya harus menggunakan setidaknya dua metode
sumber
Lihatlah Labstack Echo - ia membungkus otentikasi untuk RESTful APIs dan aplikasi frontend menjadi middleware yang dapat Anda gunakan untuk melindungi rute API tertentu.
Menyiapkan otentikasi dasar, misalnya, semudah membuat subrouter baru untuk
/admin
rute:Lihat semua opsi otentikasi middleware Labstack di sini.
sumber