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:

Basic Authentication Failing

  • 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:

Basic Authentication Succeeding

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:

  1. String "Dasar" ditambahkan ke Authorization header permintaan.
  2. 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.