Rumah >Operasi dan penyelenggaraan >Keselamatan >Apakah mekanisme kebenaran API yang mudah dan selamat berdasarkan algoritma tandatangan?
Semasa saya mengusahakan sistem pengiklanan, saya mendapati bahawa sistem pengiklanan kebanyakan platform yang saya sambungkan menggunakan token untuk membenarkan antara muka, dan token ini kekal tidak berubah dan disediakan oleh pengiklan antara muka bergelombang bagaimanapun, antara muka ini tidak mempunyai keperluan keselamatan yang tinggi Ia hanya boleh menghalang panggilan berniat jahat dan mengesahkan identiti saluran.
Tahun lepas, pengarang menulis platform kebenaran bersatu API, yang menyediakan pengurusan kebenaran bersatu untuk antara muka terbuka perkhidmatan dalaman dan panggilan sistem pihak ketiga Ia tidak mempunyai tujuan lain kecuali untuk memudahkan kebenaran antara muka pengurusan, tetapi kosnya wang untuk digunakan. Ini mungkin projek paling sia-sia yang pernah saya lakukan.
Mekanisme kebenaran API yang diperkenalkan hari ini juga mungkin merupakan mekanisme kebenaran antara muka API yang lebih banyak digunakan Saya masih ingat bahawa semasa pengarang melakukan fungsi pembayaran WeChat, antara muka pembayaran yang disediakan oleh WeChat juga menggunakan kaedah ini: tandatangan. . Kelebihan: Mudah, tiada kesan pada prestasi, tiada kos tambahan.
Logik pelaksanaan kaedah kebenaran ini ialah pemberi kuasa menetapkan identiti unik (kunci) dan kunci bebas untuk setiap platform akses, yang sebenarnya bersamaan dengan kata laluan akaun. Sistem pengaksesan diperlukan untuk membawa tiga parameter dalam pengepala permintaan setiap kali ia memulakan permintaan, iaitu identiti (kunci), cap waktu permintaan, dan tandatangan Sistem kebenaran mengesahkan tandatangan apabila menerima permintaan akan dikeluarkan hanya jika ia lulus.
Proses mengesahkan tandatangan adalah untuk mendapatkan kunci dan cap masa daripada pengepala permintaan, kemudian menjana tandatangan menggunakan algoritma yang sama berdasarkan kekunci (pemanggil dan pemberi kuasa menggunakan algoritma tandatangan yang sama), dan akhirnya bandingkan tandatangan yang diperolehi daripada pengepala permintaan Sama ada ia sama, jika ya, pengesahan berjaya, jika tidak pengesahan gagal.
Proses pelaksanaan kaedah kebenaran berdasarkan algoritma tandatangan adalah seperti berikut:
Pemberi kuasa:
1. Tentukan algoritma tandatangan dan sediakan algoritma penjanaan tandatangan untuk pihak akses, dan jana kunci dan identiti untuk pihak akses
2. Minta antara muka yang perlu mengesahkan tandatangan dalam projek, dapatkan cap waktu dan identiti daripada pengepala permintaan, dan hasilkan tandatangan berdasarkan algoritma kunci dan tandatangan , bandingkan tandatangan yang dijana dengan tandatangan yang diperoleh daripada pengepala permintaan, jika ia adalah sama, teruskan ke langkah 3, jika tidak, tolak permintaan
3 kesahihan permintaan, gunakan cap masa sistem semasa dan tandatangan yang diperoleh daripada pengepala permintaan Bandingkan cap masa yang diterima, dan jika permintaan berada dalam julat masa yang sah, permintaan akan dikeluarkan, jika tidak, ia akan ditolak dan tandatangan akan akan tamat tempoh.
Mengakses pihak:
1 Dapatkan dokumen dok daripada pihak yang diberi kuasa, dan minta pihak yang diberi kuasa untuk mendapatkan kunci dan identiti
2 . Merangkumkan kaedah tandatangan mengikut algoritma penjanaan tandatangan yang disediakan dalam dokumen
3 Apabila memulakan permintaan, tulis pengecam identiti, cap masa semasa dan tandatangan ke dalam pengepala permintaan.
Algoritma penjanaan tandatangan boleh disesuaikan, seperti menyambung identiti (kunci), cap masa (cap masa) dan kunci bersama-sama, kemudian menggunakan algoritma tidak boleh balik untuk menyulitkan rentetan untuk menghasilkan tandatangan, seperti algoritma MD5 . Peraturan yang lebih kompleks, lebih sukar untuk dipecahkan.
Apakah faedah menambahkan cap masa pada tandatangan?
Pertama ialah menambah ketepatan masa pada tandatangan. Sistem kebenaran boleh mengehadkan masa sah tandatangan kepada satu saat atau lima saat, menggunakan cap masa permintaan untuk dibandingkan dengan cap masa semasa. Walau bagaimanapun, masa sistem kedua-dua pihak mesti betul.
Yang kedua ialah keselamatan Jika penggodam memintas permintaan sistem anda, kemudian mengubah suai permintaan dan kemudian memulakan permintaan, ia pasti akan mengambil masa, apabila sistem menerima permintaan yang diganggu, tempoh sah daripada tandatangan akan Ia sudah lewat. Jika anda menukar cap masa yang diluluskan dalam pengepala permintaan, sistem yang membenarkan permintaan akan menghasilkan tandatangan yang berbeza daripada yang diluluskan dalam pengepala permintaan, jadi permintaan itu akan tetap tidak sah.
Jika anda tidak tahu kuncinya, anda tidak boleh menjana tandatangan yang sah tanpa mengetahui peraturan menandatangani pihak yang diberi kuasa (daging ayam). Fail yang ditandatangani menggunakan algoritma penyulitan asimetri menjadikannya hampir mustahil untuk memecahkan kunci melalui kekerasan.
Jadi mengapa menggunakan cap waktu dan bukannya memformat rentetan masa?
Ini mungkin disebabkan oleh pertimbangan keserasian zon waktu Jika zon waktu bilik komputer berbeza, masa akan berbeza. tetapi cap masa Semua sama.
Untuk memaksimumkan keselamatan kaedah kebenaran ini, pertama sekali, peraturan untuk menjana tandatangan mestilah cukup kompleks, maka algoritma penyulitan tandatangan mestilah tidak boleh diterbalikkan, jangan sekali-kali menggunakan algoritma seperti Base64, dan akhirnya, kunci mestilah mencukupi Ia cukup kompleks untuk memastikan bahawa walaupun peraturan penjanaan tandatangan diketahui, adalah mustahil untuk memaksa kunci itu.
Peraturan tandatangan merujuk kepada peraturan untuk menjana rentetan tandatangan sebelum penyulitan Contohnya, peraturan termasuk kunci, kunci rahsia dan cap masa, di mana kunci dan kunci rahsia muncul dua kali. Andaikan bahawa kuncinya ialah "aplikasi", kunci rahsia ialah "123", cap masa ialah "111111111111111", tandatangan pra-disulitkan yang dihasilkan oleh penyambungan ialah "app1231111111111111app123", dan akhirnya rentetan yang disambung disulitkan melalui algoritma penyulitan untuk menjana tandatangan akhir.
Adakah menyusahkan untuk menulis logik tandatangan untuk setiap antara muka?
Tidak. Bagi pemberi kuasa, logik pengesahan tandatangan boleh diselesaikan melalui penapis atau pemintas; untuk pemanggil, terdapat kaedah yang berbeza menggunakan rangka kerja yang berbeza, tetapi kita sentiasa boleh mencari cara untuk menulis logik tandatangan sekali sahaja, bukan?
Atas ialah kandungan terperinci Apakah mekanisme kebenaran API yang mudah dan selamat berdasarkan algoritma tandatangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!