Saya merancang REST API menggunakan otorisasi / otentikasi melalui Kunci API.
Saya mencoba mencari tahu apa tempat terbaik untuk itu dan menemukan bahwa banyak orang menyarankan menggunakan header HTTP khusus seperti ProjectName-Api-Key
, misalnya:
ProjectName-Api-Key: abcde
tetapi juga mungkin dan secara ideologis benar untuk menggunakan Authorization
header dengan skema khusus, misalnya:
Authorization: ApiKey abcde
Di sisi lain, saya menemukan pertimbangan bahwa skema Otorisasi khusus bisa tidak terduga dan tidak didukung oleh beberapa klien dan mengarah ke kode kustom, jadi lebih baik menggunakan header khusus karena klien tidak memiliki harapan tentang hal itu.
Cara mana yang Anda inginkan untuk mengirim Kunci API?
rest
api
authentication
authorization
headers
RomanG
sumber
sumber
Authorization: Bearer <token>
tajuk dan tidak pernah ada masalah dengan itu. Tokennya adalah JWT .Bearer
skema digunakan secara eksklusif dengan oAuth2. Menerapkannya secara terpisah dari oAuth terdengar sebagai penyalahgunaan. Mengapa benar menggunakan skema ini jika tidak ada oAuth? Omong-omong, saya kesulitan memilih jenis otorisasi untuk API saya. API hanya akan tersedia untuk satu layanan tepercaya, jadi saya menyelidiki aliran kredensial klien dari oAuth2 dan belum menemukan manfaat apa pun dibandingkan dengan ApiKey dalam kasus saya.ApiKey
diganti nama dan ditafsirkan sebagaiAccess Token
diberikan kepada klien tanpa waktu kedaluwarsa. Itu semacam aspek filosofis, saya memutuskan untuk tidak membawa definisi yang rumit jika kasus saya dapat dijelaskan dalam istilah sederhana dan memutuskan untuk menyebutnya "ApiKey". Jika protokol Anda menerapkan standar OAuth, saya bisa setuju untuk menggunakanBearer
, tetapi tidak, saya kira skema ini tidak dapat diterapkan.Jawaban:
Jika Anda menggunakan Otorisasi, konsistenlah
Beberapa orang akan berpendapat bahwa yang berikut ini tidak perlu ( dan belum lama ini saya akan setuju dengan mereka ) tetapi, hari ini, jika kita menggunakan
Authorization
header kita harus menginformasikan jenis token, karena kunci API tidak self-deskriptif per se 1 .Mengapa saya pikir itu perlu dan mengapa saya pikir itu penting? Karena saat ini mendukung berbagai protokol otentikasi / otorisasi telah menjadi keharusan. Jika kami berencana untuk menggunakan
Authorization
tajuk untuk semua protokol ini, kami harus membuat layanan auth kami konsisten. Cara untuk mengomunikasikan jenis token apa yang kami kirim dan protokol otorisasi apa yang harus diterapkan harus dimasukkan dalam header juga.Saya dulu tidak peduli dengan ini, tetapi setelah bekerja dengan aplikasi klien aplikasi yang pembaruannya tidak dijamin (kebanyakan ponsel dan sensor), saya mulai. Saya mulai lebih berhati-hati dalam cara saya menerapkan keamanan sehingga saya dapat mengembangkannya tanpa mengacaukan klien dan tanpa terlalu banyak rasa sakit di sisi server.
Kekhawatiran
Masalah yang saya hadapi dalam mengimplementasikan skema saya sendiri mirip dengan yang dikomentari.
Katakan klien , katakan perpustakaan, kerangka kerja, proksi terbalik .
Keuntungan
Satu keuntungan penting adalah cache. Tembolok yang dibagikan tidak akan men-cache header (dan tentu saja itu bagus) kecuali jika Anda mengatakan sebaliknya.
Jadi Otorisasi atau custom header?
Menurut pengalaman saya, mengimplementasikan
Authorization
skema saya sendiri telah mengambil jumlah pekerjaan yang sama (atau lebih) daripada menerapkan header otorisasi khusus, dengan sedikit perbedaan memiliki lebih banyak kebebasan desain dan lebih banyak kontrol atas cache ketika saya menggunakan header kustom. Alasannya agak bodoh, sebagian besar waktu sayaCache-control
mengaturno-cache
atauno-store
, memungkinkan saya untuk membuat panggilan ke server lebih deterministik (ini penting ketika datang untuk melacak dan menguji) terlepas dari topologi jaringan.1: Saya menemukan jawaban ini sangat jelas tentang Kunci API
sumber
X-
sudah ditinggalkan pada 2012: stackoverflow.com/a/3561399/923720