Mengautentikasi Layanan Web RESTful
HTTP mendukung penggunaan beberapa mekanisme autentikasi untuk mengontrol akses ke sumber daya. Autentikasi dasar menyediakan akses ke sumber daya hanya untuk klien yang memiliki kredensial yang benar. Artikel ini menunjukkan cara menggunakan autentikasi dasar untuk melindungi akses ke sumber daya layanan web RESTful.
Catatan
Di iOS 9 dan yang lebih besar, App Transport Security (ATS) memberlakukan koneksi aman antara sumber daya internet (seperti server ujung belakang aplikasi) dan aplikasi, sehingga mencegah pengungkapan informasi sensitif yang tidak disengaja. Karena ATS diaktifkan secara default di aplikasi yang dibangun untuk iOS 9, semua koneksi akan tunduk pada persyaratan keamanan ATS. Jika koneksi tidak memenuhi persyaratan ini, koneksi akan gagal dengan pengecualian.
ATS dapat ditolak jika tidak dimungkinkan untuk menggunakan HTTPS
protokol dan komunikasi yang aman untuk sumber daya internet. Ini dapat dicapai dengan memperbarui file Info.plist aplikasi. Untuk informasi selengkapnya, lihat Keamanan Transportasi Aplikasi.
Mengautentikasi Pengguna melalui HTTP
Autentikasi dasar adalah mekanisme autentikasi paling sederhana yang didukung oleh HTTP, dan melibatkan klien yang mengirim nama pengguna dan kata sandi sebagai teks yang dikodekan base64 yang tidak terenkripsi. Ini berfungsi sebagai berikut:
- Jika layanan web menerima permintaan untuk sumber daya yang dilindungi, layanan web menolak permintaan dengan kode status HTTP 401 (akses ditolak) dan mengatur header respons WWW-Authenticate, seperti yang ditunjukkan dalam diagram berikut:
- Jika layanan web menerima permintaan untuk sumber daya yang dilindungi, dengan header diatur dengan
Authorization
benar, layanan web merespons dengan kode status HTTP 200, yang menunjukkan bahwa permintaan berhasil dan bahwa informasi yang diminta berada dalam respons. Skenario ini diperlihatkan dalam diagram berikut:
Catatan
Autentikasi dasar hanya boleh digunakan melalui koneksi HTTPS. Ketika digunakan melalui koneksi HTTP, Authorization
header dapat dengan mudah didekodekan jika lalu lintas HTTP ditangkap oleh penyerang.
Menentukan Autentikasi Dasar dalam Permintaan Web
Penggunaan autentikasi dasar ditentukan sebagai berikut:
- String "Dasar" ditambahkan ke
Authorization
header permintaan. - Nama pengguna dan kata sandi digabungkan ke dalam string dengan format "nama pengguna:kata sandi", yang kemudian dikodekan base64 dan ditambahkan ke
Authorization
header permintaan.
Oleh karena itu, dengan nama pengguna 'XamarinUser' dan kata sandi 'XamarinPassword', header menjadi:
Authorization: Basic WGFtYXJpblVzZXI6WGFtYXJpblBhc3N3b3Jk
Kelas HttpClient
dapat mengatur Authorization
nilai header pada HttpClient.DefaultRequestHeaders.Authorization
properti . HttpClient
Karena instans ada di beberapa permintaan, Authorization
header hanya perlu diatur sekali, daripada saat membuat setiap permintaan, seperti yang ditunjukkan dalam contoh kode berikut:
public class RestService : IRestService
{
HttpClient _client;
...
public RestService ()
{
var authData = string.Format ("{0}:{1}", Constants.Username, Constants.Password);
var authHeaderValue = Convert.ToBase64String (Encoding.UTF8.GetBytes (authData));
_client = new HttpClient ();
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue ("Basic", authHeaderValue);
}
...
}
Kemudian ketika permintaan dibuat ke operasi layanan web, permintaan ditandatangani dengan Authorization
header, menunjukkan apakah pengguna memiliki izin untuk memanggil operasi atau tidak.
Penting
Meskipun kode ini menyimpan kredensial sebagai konstanta, kode ini tidak boleh disimpan dalam format yang tidak aman dalam aplikasi yang diterbitkan.
Memproses Sisi Server Header Otorisasi
Layanan REST harus menghiasi setiap tindakan dengan [BasicAuthentication]
atribut . Atribut ini digunakan untuk mengurai Authorization
header dan menentukan apakah kredensial yang dikodekan base64 valid dengan membandingkannya dengan nilai yang disimpan di Web.config. Meskipun pendekatan ini cocok untuk layanan sampel, pendekatan ini memerlukan perluasan untuk layanan web yang menghadap publik.
Dalam modul autentikasi dasar yang digunakan oleh IIS, pengguna diautentikasi terhadap kredensial Windows mereka. Oleh karena itu, pengguna harus memiliki akun di domain server. Namun, model autentikasi Dasar dapat dikonfigurasi untuk mengizinkan autentikasi kustom, di mana akun pengguna diautentikasi terhadap sumber eksternal, seperti database. Untuk informasi selengkapnya, lihat Autentikasi Dasar di ASP.NET Web API di situs web ASP.NET.
Catatan
Autentikasi dasar tidak dirancang untuk mengelola pengelogan. Oleh karena itu, pendekatan autentikasi dasar standar untuk pengelogan adalah untuk mengakhiri sesi.