Saya sedang membangun aplikasi yang akan di-host di server. Saya ingin membuat API untuk aplikasi untuk memfasilitasi interaksi dengan dari platform apa pun (Aplikasi Web, Aplikasi Seluler). Yang tidak saya mengerti adalah bahwa ketika menggunakan REST API, bagaimana kami mengautentikasi pengguna.
Misalnya, ketika pengguna telah masuk dan kemudian ingin membuat topik forum. Bagaimana saya tahu bahwa pengguna sudah masuk?
Authorization
header + misalnya browser localStorage VSCookie
header + penyimpanan cookie browser standar.Jawaban:
Anda dapat menggunakan HTTP Basic atau Otentikasi Intisari. Anda dapat mengautentikasi pengguna yang menggunakan SSL secara aman di atasnya, namun, itu sedikit memperlambat API.
OAuth adalah yang terbaik yang bisa didapat. Keuntungan yang diberikan oAuth adalah token yang dapat dicabut atau diharapkan. Rujuk mengikuti cara penerapan: Tautan yang Berfungsi dari komentar: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
sumber
Misalnya, ketika pengguna login. Sekarang katakanlah pengguna ingin membuat topik forum, Bagaimana saya tahu bahwa pengguna sudah masuk?
Pikirkan tentang hal itu - harus ada jabat tangan yang memberi tahu Anda tentang "Buat Forum" API bahwa permintaan saat ini dari pengguna yang diautentikasi. Karena REST API biasanya tidak memiliki kewarganegaraan, negara harus bertahan di suatu tempat . Klien Anda yang mengonsumsi API REST bertanggung jawab untuk mempertahankan status itu. Biasanya, itu dalam bentuk beberapa token yang akan diteruskan sejak saat pengguna login. Jika token itu baik, permintaan Anda baik.
Periksa bagaimana Amazon AWS melakukan otentikasi. Itu adalah contoh sempurna dari "meneruskan tanggung jawab" dari satu API ke API lainnya.
* Saya berpikir untuk menambahkan beberapa jawaban praktis untuk jawaban saya sebelumnya. Coba Apache Shiro (atau perpustakaan otentikasi / otorisasi). Intinya, coba dan hindari pengkodean khusus. Setelah Anda mengintegrasikan perpustakaan favorit Anda (saya menggunakan Apache Shiro, btw) Anda kemudian dapat melakukan hal berikut:
/api/v1/login
danapi/v1/logout
JSESSIONID
) yang dikirim kembali ke klien (web, seluler, apa pun)/api/v1/findUser
Itu saja. Semoga ini membantu.
sumber
Gunakan HTTP Basic Auth untuk mengotentikasi klien, tetapi perlakukan nama pengguna / kata sandi hanya sebagai token sesi sementara .
Token sesi hanyalah tajuk yang dilampirkan pada setiap permintaan HTTP, misalnya:
Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0
String Ym9ic2Vzc2lvbjE6czNjcmV0 di atas hanyalah string "bobsession1: s3cret" (yang merupakan nama pengguna / kata sandi) yang disandikan di Base64.
Untuk mendapatkan token sesi sementara di atas, berikan fungsi API (misalnya:)
http://mycompany.com/apiv1/login
yang mengambil master-username dan master-password sebagai input, membuat sementara HTTP Basic Auth username / password di sisi server, dan mengembalikan token (misalnya: Ym9ic2Vzc2lvbjE6czNjcmV0). Nama pengguna / kata sandi ini harus sementara, harus berakhir setelah 20 menit atau lebih.Untuk keamanan tambahan, pastikan layanan REST Anda dilayani melalui HTTPS sehingga informasi tidak ditransfer plaintext
Jika Anda menggunakan Java, pustaka Spring Security menyediakan dukungan yang baik untuk mengimplementasikan metode di atas
sumber
Saya pikir pendekatan terbaik adalah menggunakan OAuth2. Google dan Anda akan menemukan banyak posting berguna untuk membantu Anda mengaturnya.
Akan lebih mudah untuk mengembangkan aplikasi klien untuk API Anda dari aplikasi web atau aplikasi seluler.
Semoga ini bisa membantu Anda.
sumber
Saya telah menggunakan otentikasi JWT. Bekerja dengan baik di aplikasi saya.
Ada metode otentikasi yang akan memerlukan kredensial pengguna. Metode ini memvalidasi kredensial dan mengembalikan token akses jika sukses.
Token ini harus dikirim ke setiap metode lain di API Web saya di header permintaan.
Ini sangat mudah diimplementasikan, dan sangat mudah untuk diuji.
sumber