Kami sedang mengerjakan proyek baru, kami adalah dua pengembang utama dan mendapatkan persimpangan tentang cara menggunakan token untuk mengamankan komunikasi antara server dan klien.
Saran Pertama: (Token Statis satu kali AKA)
klien meminta token utama, dengan mengirim nama pengguna dan kata sandi dan current_time (variabel ini akan disimpan dalam database server dan sisi klien juga) ke api, server menginterpretasikan input, dan merender tohed token (mis: 58f52c075aca5d3e07869598c4d66648) menyimpannya di database dan mengembalikannya ke klien.
Klien sekarang menyimpan token utama, dan membuat token hash baru menggunakan token primer + variabel current_time yang dikirim dalam permintaan otentikasi (sebut saja token baru ini, main_token) juga server melakukan hal yang sama dan membuat token yang sama menggunakan algoritma yang sama .
Setiap kali klien menanyakan API server, ia mengirimkan main_token ke server, sekarang server membandingkan token yang dihasilkan di dalamnya, dengan main_token yang dikirim oleh klien, jika cocok, itu berarti pengguna itu nyata
Saran Kedua: (Token Dinamis)
Klien menghasilkan dua kunci acak ($ key1 = rand (10000.90000); $ key2 = rand (10000.900.000);) Pada setiap permintaan pada API, klien membuat hash menggunakan tipe kueri, dan dua kunci dengan algoritma yang kompleks, dan mengirimkan dua kunci ini + hash ke server
Server, menggunakan Algoritma yang sama yang digunakan dalam klien, membuat hash, dan membandingkannya dengan yang dikirim oleh klien, jika cocok, server melanjutkan untuk berurusan dengan kueri
Sekarang, pertanyaannya adalah, Mana yang merupakan cara paling logis, dan aman untuk digunakan untuk mengamankan permintaan API?
Jawaban:
Saya sangat suka pendekatan pertama secara umum.
Satu hal yang saya tidak melihat disebutkan tentang yang pertama yang harus Anda ingat, cap waktu yang digunakan untuk hash token perlu memiliki kedaluwarsa TTL yang sangat singkat (seperti 1 detik) sehingga Anda memverifikasi pesan tidak dikirim dengan cap waktu dan token yang sama dari pesan 12 jam sebelumnya; jelas itu akan dihitung sebagai sah tetapi tidak dalam kasus ini.
Jika ini adalah hanya dua opsi yang Anda pertimbangkan, namun saya ingin memastikan Anda telah melihat pendekatan lain juga, karena ada banyak. Lebih dari saya akan daftar sebenarnya. Ini adalah beberapa pendekatan autentik umum yang layak dipelajari hanya untuk melihat apakah pendekatan tersebut sesuai dengan tujuan Anda dengan lebih baik, dan jika tidak ada yang memahaminya dapat memberi Anda beberapa ide untuk membantu memperketat pendekatan mana pun yang Anda gunakan.
Perhatikan, saya bukan ahli keamanan.
OAuth / Federasi
Dalam pendekatan ini Anda memiliki penjamin pihak ke-3 di mana kode konsumsi meminta token / cert / apa yang Anda dapatkan dari mereka dan menyampaikannya kepada Anda, pada titik ini yang perlu Anda lakukan adalah bertanya kepada pihak ke-3 jika kunci yang Anda berikan adalah sah.
Pro:
Menipu:
Sertifikat Asinkron
Di sini Anda akan meminta klien Anda mengenkripsi komunikasi mereka dengan sertifikat publik yang telah Anda bagikan dengan mereka ketika mereka menciptakan pengguna. Di sisi Anda, Anda akan mendekripsi menggunakan kunci pribadi yang terkait dengan pengguna di sana. Secara umum Anda akan memulai komunikasi dengan respons tantangan untuk menunjukkan bahwa mereka dapat mengenkripsi / mendekripsi seperti yang Anda harapkan mengidentifikasi mereka sebagai siapa yang mereka klaim. Meskipun pendekatan "sinkron" mungkin dilakukan yang tidak menggunakan tantangan-respons, mereka memiliki sedikit keamanan yang kurang dan beberapa masalah sinkronisasi waktu yang dapat membuatnya lebih rumit.
dari Novell (yeah I know, novell? really?)
Pro:
Menipu:
NTLM
Jangan tertawa, jika ini adalah layanan yang lebih kecil atau internal saja dan Anda berada di lingkungan windows, tidak ada yang salah dengan menggunakan otentikasi NTLM standar untuk menjamin akses. Terutama jika Anda bekerja dengan IIS, ini adalah pendekatan yang paling sederhana. Mudah dirawat dan dikonfigurasikan juga di web.config.
Pro:
Menipu:
Nonces
Ketika bekerja dengan nonces dalam pendekatan otentikasi Anda, Anda menyediakan metode untuk mendapatkan nonce pada layanan. Metode ini mengembalikan string sewenang-wenang unik atau sepotong data ("a nonce") pada setiap permintaan. Setiap permintaan ke metode lain sekarang membutuhkan nonce untuk diambil, dan digunakan dalam algoritma crypto untuk permintaan tersebut. Nilai di sini adalah bahwa server melacak nonces yang digunakan, dan tidak pernah mengizinkan penggunaan kembali suatuce, ini benar-benar mencegah serangan replay karena sekali permintaan dengan satuce dibuat, permintaan dengance itu tidak pernah dapat dibuat lagi. Ketika nonces diminta, mereka ditambahkan ke daftar nonces yang tersedia, karena mereka digunakan, mereka dipindahkan dari daftar yang tersedia ke daftar yang digunakan.
Pro:
Menipu:
sumber