Autentikasi di SQL Server Reporting Services

Autentikasi adalah proses menetapkan hak pengguna atas identitas. Ada banyak teknik yang dapat Anda gunakan untuk mengautentikasi pengguna. Cara paling umum adalah menggunakan kata sandi. Saat Anda menerapkan Autentikasi Formulir, misalnya, Anda menginginkan implementasi yang meminta kredensial kepada pengguna (biasanya oleh beberapa antarmuka yang meminta nama masuk dan kata sandi) lalu memvalidasi pengguna terhadap penyimpanan data, seperti tabel database atau file konfigurasi. Jika kredensial tidak dapat divalidasi, proses autentikasi gagal dan pengguna mengasumsikan identitas anonim.

Autentikasi kustom di Reporting Services

Di Reporting Services, sistem operasi Windows menangani autentikasi pengguna baik melalui keamanan terintegrasi atau melalui penerimaan eksplisit dan validasi kredensial pengguna. Autentikasi kustom dapat dikembangkan di Reporting Services untuk mendukung lebih banyak skema autentikasi. Dukungan ini dimungkinkan melalui antarmuka IAuthenticationExtension2ekstensi keamanan . Semua ekstensi mewarisi dari IExtension antarmuka dasar untuk ekstensi apa pun yang disebarkan dan digunakan oleh server laporan. IExtension, dan IAuthenticationExtension2, adalah anggota Microsoft.ReportingServices.Interfaces namespace layanan.

Cara utama untuk mengautentikasi terhadap server laporan di Reporting Services adalah metode .LogonUser Anggota layanan Web Reporting Services ini dapat digunakan untuk meneruskan kredensial pengguna ke server laporan untuk validasi. Ekstensi keamanan dasar Anda mengimplementasikan IAuthenticationExtension2.LogonUser yang berisi kode autentikasi kustom Anda. Dalam sampel Autentikasi Formulir, LogonUser, yang melakukan pemeriksaan autentikasi terhadap kredensial yang disediakan dan penyimpanan pengguna kustom dalam database. Contoh implementasi LogonUser terlihat seperti ini:

public bool LogonUser(string userName, string password, string authority)  
{  
   return AuthenticationUtilities.VerifyPassword(userName, password);  
}  
  

Contoh fungsi berikut digunakan untuk memverifikasi kredensial yang disediakan:

  
internal static bool VerifyPassword(string suppliedUserName,  
   string suppliedPassword)  
{   
   bool passwordMatch = false;  
   // Get the salt and pwd from the database based on the user name.  
   // See "How To: Use DPAPI (Machine Store) from ASP.NET," "How To:  
   // Use DPAPI (User Store) from Enterprise Services," and "How To:  
   // Create a DPAPI Library" for more information about how to use  
   // DPAPI to securely store connection strings.  
   SqlConnection conn = new SqlConnection(  
      "Server=localhost;" +   
      "Integrated Security=SSPI;" +  
      "database=UserAccounts");  
   SqlCommand cmd = new SqlCommand("LookupUser", conn);  
   cmd.CommandType = CommandType.StoredProcedure;  
  
   SqlParameter sqlParam = cmd.Parameters.Add("@userName",  
       SqlDbType.VarChar,  
       255);  
   sqlParam.Value = suppliedUserName;  
   try  
   {  
      conn.Open();  
      SqlDataReader reader = cmd.ExecuteReader();  
      reader.Read(); // Advance to the one and only row  
      // Return output parameters from returned data stream  
      string dbPasswordHash = reader.GetString(0);  
      string salt = reader.GetString(1);  
      reader.Close();  
      // Now take the salt and the password entered by the user  
      // and concatenate them together.  
      string passwordAndSalt = String.Concat(suppliedPassword, salt);  
      // Now hash them  
      string hashedPasswordAndSalt =  
         FormsAuthentication.HashPasswordForStoringInConfigFile(  
         passwordAndSalt,  
         "SHA1");  
      // Now verify them. Returns true if they are equal.  
      passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);  
   }  
   catch (Exception ex)  
   {  
       throw new Exception("Exception verifying password. " +  
          ex.Message);  
   }  
   finally  
   {  
       conn.Close();  
   }  
   return passwordMatch;  
}  

Alur autentikasi

Layanan Web Reporting Services menyediakan ekstensi autentikasi kustom untuk mengaktifkan Autentikasi Formulir oleh portal web dan server laporan.

Metode LogonUser layanan Web Reporting Services digunakan untuk mengirimkan kredensial ke server laporan untuk autentikasi. Layanan Web menggunakan header HTTP untuk meneruskan tiket autentikasi (dikenal sebagai "cookie") dari server ke klien untuk permintaan masuk yang divalidasi.

Ilustrasi berikut menggambarkan metode autentikasi pengguna ke layanan Web saat aplikasi Anda disebarkan dengan server laporan yang dikonfigurasi untuk menggunakan ekstensi autentikasi kustom.

Screenshot of the Reporting Services security authentication flow.

Seperti yang ditunjukkan pada Gambar 2, proses autentikasi adalah sebagai berikut:

  1. Aplikasi klien memanggil metode layanan LogonUser Web untuk mengautentikasi pengguna.

  2. Layanan Web melakukan panggilan ke LogonUser metode ekstensi keamanan Anda, khususnya, kelas yang mengimplementasikan IAuthenticationExtension2.

  3. Implementasi LogonUser Anda memvalidasi nama pengguna dan kata sandi di penyimpanan pengguna atau otoritas keamanan.

  4. Setelah autentikasi berhasil, layanan Web membuat cookie dan mengelolanya untuk sesi tersebut.

  5. Layanan Web mengembalikan tiket autentikasi ke aplikasi panggilan pada header HTTP.

Ketika layanan Web berhasil mengautentikasi pengguna melalui ekstensi keamanan, layanan ini menghasilkan cookie yang digunakan untuk permintaan berikutnya. Cookie mungkin tidak bertahan dalam otoritas keamanan kustom karena server laporan tidak memiliki otoritas keamanan. Cookie dikembalikan dari LogonUser metode layanan Web dan digunakan dalam panggilan metode layanan Web berikutnya dan dalam akses URL.

Catatan

Untuk menghindari penyusupan cookie selama transmisi, cookie autentikasi yang dikembalikan LogonUser harus ditransmisikan dengan aman menggunakan Keamanan Lapisan Transportasi (TLS), yang sebelumnya dikenal sebagai Secure Sockets Layer (SSL), enkripsi.

Jika Anda mengakses server laporan melalui akses URL saat ekstensi keamanan kustom diinstal, Layanan Informasi Internet (IIS) dan ASP.NET secara otomatis mengelola transmisi tiket autentikasi. Jika Anda mengakses server laporan melalui SOAP API, implementasi kelas proksi Anda harus menyertakan dukungan tambahan untuk mengelola tiket autentikasi. Untuk informasi selengkapnya tentang menggunakan SOAP API dan mengelola tiket autentikasi, lihat "Menggunakan Layanan Web dengan Keamanan Kustom."

Autentikasi Formulir

Autentikasi Formulir adalah jenis autentikasi ASP.NET di mana pengguna yang tidak diautentikasi diarahkan ke formulir HTML. Setelah pengguna memberikan kredensial, sistem mengeluarkan cookie yang berisi tiket autentikasi. Pada permintaan selanjutnya, sistem terlebih dahulu memeriksa cookie untuk melihat apakah server laporan mengautentikasi pengguna.

Reporting Services dapat diperluas untuk mendukung Autentikasi Formulir menggunakan antarmuka ekstensibilitas keamanan yang tersedia melalui API Reporting Services. Jika Anda memperluas Layanan Pelaporan untuk menggunakan Autentikasi Formulir, gunakan Keamanan Lapisan Transportasi (TLS), yang sebelumnya dikenal sebagai Secure Sockets Layer (SSL), untuk semua komunikasi dengan server laporan untuk mencegah pengguna jahat mendapatkan akses ke cookie pengguna lain. TLS memungkinkan klien dan server laporan untuk saling mengautentikasi dan memastikan bahwa tidak ada komputer lain yang dapat membaca konten komunikasi antara kedua komputer. Semua data yang dikirim dari klien melalui koneksi TLS dienkripsi sehingga pengguna berbahaya tidak dapat mencegat kata sandi atau data yang dikirim ke server laporan.

Autentikasi Formulir diimplementasikan untuk mendukung akun dan autentikasi untuk platform selain Windows. Antarmuka grafis disajikan kepada pengguna yang meminta akses ke server laporan, dan kredensial yang disediakan dikirimkan ke otoritas keamanan untuk autentikasi.

Autentikasi Formulir mengharuskan seseorang hadir untuk memasukkan kredensial. Untuk aplikasi tanpa pengawas yang berkomunikasi langsung dengan layanan Web Reporting Services, Autentikasi Formulir harus dikombinasikan dengan skema autentikasi kustom.

Autentikasi Formulir sesuai untuk Layanan Pelaporan saat:

  • Anda perlu menyimpan dan mengautentikasi pengguna yang tidak memiliki akun Microsoft Windows, dan

  • Anda perlu menyediakan formulir antarmuka pengguna Anda sendiri sebagai halaman masuk antara halaman yang berbeda pada situs Web.

Pertimbangkan poin-poin berikut saat menulis ekstensi keamanan kustom yang mendukung Autentikasi Formulir:

  • Jika Anda menggunakan Autentikasi Formulir, akses anonim harus diaktifkan pada direktori virtual server laporan di Layanan Informasi Internet (IIS).

  • autentikasi ASP.NET harus diatur ke Formulir. Anda mengonfigurasi autentikasi ASP.NET di file Web.config untuk server laporan.

  • Reporting Services dapat mengautentikasi dan mengotorisasi pengguna dengan Autentikasi Windows atau autentikasi kustom, tetapi tidak keduanya. Reporting Services tidak mendukung penggunaan ekstensi keamanan secara bersamaan.