Masuk set asp. Kontrol masuk. Cara mendapatkan nilai numerik dari string

Kontrol login ASP.NET menyediakan solusi login yang kuat untuk aplikasi Web ASP.NET tanpa memerlukan pemrograman. Secara default, kontrol login terintegrasi dengan keanggotaan ASP.NET dan otentikasi bentuk untuk membantu mengotomatisasi otentikasi pengguna untuk situs Web. Ini memberi Anda antarmuka pengguna siap pakai yang menanyakan nama pengguna dan kata sandi dari pengguna dan menawarkan tombol Masuk untuk masuk. Ini memvalidasi kredensial pengguna terhadap API keanggotaan dan merangkum fungsionalitas dasar dari otentikasi seperti mengarahkan kembali ke halaman yang diminta asli di area terbatas aplikasi Anda setelah login berhasil.

Kontrol Login menampilkan antarmuka pengguna untuk otentikasi pengguna. Kontrol masuk berisi kotak teks untuk nama pengguna dan kata sandi dan kotak centang yang memungkinkan pengguna untuk menunjukkan apakah mereka ingin server menyimpan identitas mereka menggunakan keanggotaan ASP.NET dan secara otomatis diautentikasi saat berikutnya mereka mengunjungi situs.

Kontrol Login memiliki properti untuk tampilan yang disesuaikan, untuk pesan yang disesuaikan, dan untuk tautan ke halaman lain di mana pengguna dapat mengubah kata sandi mereka atau memulihkan kata sandi yang terlupakan. Kontrol Login dapat digunakan sebagai kontrol mandiri pada halaman utama atau beranda, atau Anda dapat menggunakannya pada halaman login khusus. Jika Anda menggunakan kontrol Login dengan keanggotaan ASP.NET, Anda tidak perlu menulis kode untuk melakukan otentikasi. Namun, jika Anda ingin membuat logika autentikasi sendiri, Anda dapat menangani peristiwa Otentikasi kontrol Masuk dan menambahkan kode autentikasi khusus.

Catatan - Kontrol masuk mungkin tidak berfungsi dengan benar jika Metode halaman Web ASP.NET diubah dari POST (default) ke GET.

Setiap kali pengguna menekan tombol Masuk, kontrol secara otomatis memvalidasi nama pengguna dan kata sandi menggunakan fungsi API keanggotaan Membership.ValidateUse () dan kemudian memanggil FormAuthentication.redirectFromLoginPage () jika validasi berhasil. Semua opsi pada UI LoginControl memengaruhi input yang dikirim oleh kontrol ke metode ini. Misalnya, jika Anda mengklik kotak centang "Ingat saya lain kali", itu akan meneruskan nilai true ke parameter createPresistentCookie dari metode RedirectFromLoginPage (). Oleh karena itu, FormAuthenticateModule membuat cookie tetap.

Ada tiga Tugas Masuk secara default.

  • Format Otomatis - Anda dapat memilih skema default.
  • Convert To Template - Anda dapat mengedit konten Kontrol Login.
  • Kelola Situs Web - Anda dapat mengonfigurasi Alat Administrasi Situs Web, Seperti Keamanan, Aplikasi, Penyedia.

  1. "Login1" runat = "server" BackColor = "# F7F7DE" BorderColor = "# CCCC99" BorderStyle = "Solid" BorderWidth = "1px" Font-Names = "Verdana" Font-Size = "10pt">
  • Anda juga dapat mengubah gaya LoginControl menggunakan css, Seperti ini:

    1. .Kontrol Masuk
    2. warna latar: # F7F7DE;
    3. warna batas: # CCCC99;
    4. gaya perbatasan: padat;
    5. lebar batas: 1 piksel;
    6. font-family: Verdana;
    7. ukuran font: 10px;

    Dan sekarang terapkan css untuk mengontrol:

    1. < html xmlns = "http://www.w3.org/1999/xhtml">
    2. < head runat = "server" >
    3. < title >Kontrol Masuk
    4. < link href = "StyleSheet.css" type = "text/css" rel = "Stylesheet" />
    5. < body >
    6. < form id = "form1" runat = "server" >
    7. < div >
    8. < asp:Login ID = "Login1" runat = "server" CssClass = "LoginControl" >
    9. < TitleTextStyle BackColor = "#6B696B" Font-Bold = "True" ForeColor = "#FFFFFF" />

    Jika Anda menjalankan halaman dan jika file CSS ditempatkan di direktori di mana akses anonim ditolak, tambahkan konfigurasi berikut untuk file CSS ke file web.config Anda.

    1. < location path = "StyleSheet.css" >
    2. < system.web >
    3. < authorization >
    4. < allow users = "*" />

    Anda dapat menambahkan beberapa hyperlink ke kontrol Login Anda, seperti hyperlink ke halaman teks bantuan, atau hyperlink ke halaman pendaftaran.

    1. < asp:Login ID = "Login1" runat = "server" CssClass = "LoginControl"
    2. CreateUserText = "Daftar"
    3. CreateUserUrl = "~ / Register.aspx"
    4. HelpPageText = "Bantuan Tambahan" HelpPageUrl = "~ / Help.aspx"
    5. Teks Instruksi = "Silakan masukkan nama pengguna dan kata sandi Anda untuk login.">
    6. < TitleTextStyle BackColor = "#6B696B" Font-Bold = "True" ForeColor = "#FFFFFF" />

    Terlihat seperti ini:

    Ini kode .CS:

    1. menggunakan Sistem;
    2. menggunakan System.Collections.Generic;
    3. menggunakan System.Linq;
    4. menggunakan System.Web;
    5. menggunakan System.Web.UI;
    6. menggunakan System.Web.UI.WebControls;
    7. menggunakan System.Data.SqlClient;
    8. kelas parsial publik _Default: System.Web.UI.Page
    9. protected void Page_Load (pengirim objek, EventArgs e)
    10. jika (! ini .IsPostBack)
    11. protected void Login1_Authenticate (objek pengirim, AuthenticateEventArgs e)
    12. jika (Fungsi Validasi Anda (Login1.UserName, Login1.Password))
    13. // e.Diotentikasi = benar;
    14. Login1.Terlihat = Salah;
    15. MessageLabel.Text = "Berhasil Masuk";
    16. kalau tidak
    17. e.Otentikasi = salah;
    18. protected void Login1_LoginError (pengirim objek, EventArgs e)
    19. if (ViewState ["LoginErrors"] == null)
    20. ViewState ["LoginErrors"] = 0;
    21. int ErrorCount = (int) ViewState ["LoginErrors"] + 1;
    22. ViewState ["LoginErrors"] = ErrorCount;
    23. jika ((Jumlah Kesalahan> 3) && (Login1.PasswordRecoveryUrl! = string .Kosong))
    24. Response.Redirect (Login1.PasswordRecoveryUrl);
    25. private bool YourValidationFunction (string UserName, string Password)
    26. bool boolReturnValue = salah;
    27. string strKoneksi = "server = .; database = Vendor; uid = sa; pwd = wintellect;";
    28. SqlConnection sqlConnection = baru SqlConnection (strConnection);
    29. String SQLQuery = "PILIH Nama Pengguna, Kata Sandi DARI Login";
    30. Perintah SqlCommand = baru SqlCommand (SQLQuery, sqlConnection);
    31. SqlDataReader Dr;
    32. sqlConnection.Buka();
    33. Dr = perintah.ExecuteReader();
    34. sementara (Dr. Baca ())
    35. if ((Nama Pengguna == Dr ["Nama Pengguna" ] .ToString ()) & (Kata Sandi == Dr ["Kata Sandi"] .ToString ()))
    36. boolReturnValue = benar;
    37. Dr.Tutup();
    38. kembalikan boolReturnValue;
    39. kembalikan boolReturnValue;

    Jika Anda memasukkan nama pengguna dan kata sandi yang salah maka akan muncul pesan seperti ini:

    Jika Anda memasukkan nama pengguna, kata sandi yang benar, lalu mengarahkan ulang halaman Anda ke mana pun Anda inginkan atau Anda dapat menampilkan pesan di ErrorLabel, Seperti ini:

    Saya melampirkan database saya dengan aplikasi di folder App_Data, jika Anda ingin menggunakan database saya maka lampirkan file .MDF saya.

    Setiap pertanyaan dan pertanyaan bertanya kepada saya kapan saja.

    Sebagian besar situs web beroperasi dalam mode akses anonim. Mereka berisi informasi yang dapat dilihat siapa saja, dan karena itu tidak mengautentikasi pengguna. Aplikasi Web ASP.NET menyediakan akses anonim ke sumber daya server dengan menetapkan akun ke pengguna anonim. Secara default, akun akses anonim bernama IUSER _ nama komputer.

    ASP.NET menjalankan aplikasi web di bawah Akun ASPNET. Ini berarti aplikasi ditolak aksesnya saat melakukan tugas yang tidak disediakan oleh hak pengguna (misalnya, menulis file ke disk).
    Identifikasi pengguna digunakan ketika Anda perlu menyediakan akses ke bagian aplikasi web hanya untuk pengguna tertentu. Ini bisa berupa toko Internet, forum, bagian tertutup di situs Intranet perusahaan, dan sebagainya.
    Keamanan dalam aplikasi ASP.NET didasarkan pada tiga operasi:

    • Autentikasi- proses identifikasi pengguna untuk menyediakan akses ke beberapa sumber daya aplikasi (bagian situs, halaman, database, ...). Otentikasi didasarkan pada verifikasi informasi pengguna (seperti nama pengguna dan kata sandi);
    • Otorisasi- proses pemberian akses kepada pengguna berdasarkan data otentikasi;
    • Peniruan(impersonalization) - Memberikan hak akses klien ke proses server ASP.NET.
    Ada tiga cara untuk mengotentikasi pengguna dalam aplikasi ASP.NET:
    • autentikasijendela- digunakan untuk mengidentifikasi dan mengotorisasi pengguna tergantung pada hak istimewa akun pengguna. Bekerja dengan cara yang mirip dengan mekanisme keamanan jaringan Windows normal dan dilakukan oleh pengontrol domain;
    • autentikasiFormulir- pengguna memasukkan nama pengguna dan kata sandi di formulir Web, setelah itu otorisasi terjadi sesuai dengan daftar pengguna yang disimpan, misalnya, dalam database. Ini digunakan di sebagian besar situs Internet saat mendaftar di toko Inernet, forum, dll.
    • autentikasiPaspor- semua pengguna memiliki satu nama dan kata sandi yang digunakan untuk situs yang menggunakan jenis otorisasi ini. Pengguna mendaftar dengan Microsoft Passport.
    Penting untuk dicatat bahwa otentikasi ASP.NET hanya berlaku untuk formulir web (file .aspx), kontrol (file .ascx), dan sumber daya ASP.NET lainnya. File HTML tidak termasuk dalam daftar ini. Untuk mengotorisasi akses ke file HTML, Anda harus mendaftarkannya secara manual!
    Jenis otentikasi ditentukan dalam file konfigurasi Web.config:


    Standarnya adalah jenis otentikasi Windows. Masuk akal untuk menetapkan nilai ke Tidak Ada jika Anda menggunakan skema otentikasi Anda sendiri atau akses anonim (untuk meningkatkan kinerja).
    Autentikasijendela. Ada 4 jenis otentikasi Windows: dasar, intisari, terintegrasi, dan sertifikat klien SSL. Otentikasi Dasar dan Singkat digunakan untuk mengidentifikasi nama pengguna dan kata sandi yang ditentukan dalam kotak dialog. Mereka bekerja dengan baik di Internet karena data ditransmisikan melalui HTTP. Otentikasi Dasar mentransfer kata sandi dan nama pengguna dalam pengkodean Base 64, yang mudah didekodekan. Otentikasi dasar dapat digunakan bersama dengan SSL untuk meningkatkan keamanan. Sebagian besar browser mendukung Otentikasi Dasar.
    Otentikasi singkat lebih aman karena kata sandi dienkripsi menggunakan algoritma MD 5. Ini didukung oleh Internet Explorer 5.0 dan browser yang lebih tinggi, atau harus diinstal pada mesin klien. Kerangka .NET. Selain itu, akun pengguna harus disimpan di Direktori Aktif.
    Otentikasi terintegrasi digunakan untuk mengotentikasi akun Windows dan tidak dapat digunakan di Internet karena klien dan server harus diautentikasi oleh pengontrol domain. Pada saat yang sama, kata sandi tidak dikirimkan melalui jaringan, yang meningkatkan keamanan aplikasi. Jenis otentikasi ini diblokir oleh firewall dan hanya berfungsi dengan Internet Explorer. Otentikasi Built-in sedikit lebih lambat dari Basic atau Concise.
    Penggunaan sertifikat SSL juga biasa digunakan di Intranet karena membutuhkan distribusi sertifikat digital. Dengan jenis otentikasi ini, pengguna tidak perlu mendaftar. Sertifikat dapat dipetakan ke akun pengguna di domain atau Direktori Aktif.

    Untuk menentukan metode otentikasi, Anda perlu melakukan hal berikut:
    1. Mulai Manajer IIS
    2. Klik kanan pada aplikasi dan pilih di menu konteks Properti.
    3. Pada dialog yang muncul, buka tab Keamanan direktori dan tekan tombol Mengubah Dalam bab Akses dan otentikasi anonim.

    4. Dalam dialog Metode Otentikasi menentukan jenis otentikasi.


    5. Tentukan hak akses ke folder atau file individual dalam folder aplikasi Web. Pastikan untuk mengaktifkan akses untuk pengguna ASPNET.








    Dalam hal ini, akses diizinkan untuk pengguna DENIS dan akses ditolak untuk semua orang. Alih-alih nama pengguna, bisa juga ada nama peran yang dimiliki pengguna - administrator, manajer, ...:










    Jika kita ingin melindunginya sepenuhnya folder pengguna yang tidak diautentikasi (misalnya, folder yang berisi formulir untuk administrasi situs), maka kita perlu menempatkan file Web.config di dalamnya dengan konten berikut ("?" Simbol berarti pengguna anonim yang tidak sah) :







    Jika kita ingin melindungi hanya satu file (misalnya, untuk mengonfirmasi pesanan di toko Internet), tambahkan baris berikut ke Web.config dari folder root:







    Aplikasi mengambil data pengguna menggunakan properti Identity dari kelas Pengguna. Properti ini mengembalikan objek yang berisi nama pengguna dan peran.

    bool authenticated = User.Identity.IsAuthenticated;
    nama string = User.Identity.Name;
    bool admin = User.IsInRole("Admin");

    Otentikasi formulir

    Saat menggunakan otentikasi Formulir, permintaan untuk parameter pendaftaran (misalnya, login dan kata sandi) terjadi di formulir web. Halaman pendaftaran ditentukan dalam berkas Web.config. Pada akses pertama ke halaman yang dilindungi, ASP.NET mengarahkan pengguna ke halaman untuk memasukkan kata sandi. Setelah pendaftaran berhasil, data otentikasi disimpan dalam bentuk cookie, dan tidak diperlukan pendaftaran saat mengakses halaman aman lagi.
    Untuk menggunakan otentikasi Formulir di file Web.config di folder akar aplikasi, Anda perlu menentukan halaman untuk memasukkan kata sandi:



    Saat mencoba melihat halaman aman, ASP.NET memeriksa apakah ada cookie otentikasi dalam permintaan. Jika tidak ada cookie, maka permintaan diarahkan ke halaman pendaftaran, jika ada, ASP.NET mendekripsi cookie dan mengekstrak informasi pendaftaran darinya.

    Formulir berisi bidang untuk memasukkan nama pengguna dan kata sandi dan kotak centang untuk pendaftaran yang disimpan. Ketika Anda menekan tombol "Login", pengguna dicari dengan nama pengguna dan kata sandi yang sama. Jika pengguna tersebut ditemukan, fungsi FormsAuthentication.RedirectFromLoginPage () akan dipanggil, menentukan ID pengguna dan bendera untuk pendaftaran tetap. Jika tidak, pesan kesalahan akan ditampilkan.

    protected void btnLogin_Click (pengirim objek, System.EventArgs e)
    {
    if (! IsValid) // periksa kebenaran data yang dimasukkan
    kembali;

    Koneksi OleDbConnection = GetDbConnection ();

    Mencoba
    {
    koneksi.Buka();

    Perintah OleDbCommand = new OleDbCommand (string.Format ("SELECT id FROM Customers WHERE login =" (0) "AND password =" (1) "", login, password), koneksi);

    pembaca OleDbDataReader = perintah.ExecuteReader();
    jika (! reader.Read ()) // kata sandi atau login salah
    {
    lblError.Text = "Kata sandi tidak valid - silakan coba lagi";
    kembali;
    }

    String id = pembaca kembali.GetInt32 (0) .ToString();

    FormsAuthentication.RedirectFromLoginPage (id, chkbRememberLogin.Checked);
    }
    tangkap (mis. OleDbException)
    {
    lblError.Text = "Kesalahan Basis Data";
    }
    akhirnya
    {
    koneksi.Tutup ();
    }
    }

    Otentikasi Berbasis Peran

    Untuk otentikasi berbasis peran, atribut role dari tag allow digunakan. Misalnya, jika kita ingin menolak akses ke semua orang kecuali pengguna dari grup Admin, kita harus memasukkan baris tersebut ke file Web.config.




    Kemudian, dengan setiap permintaan, Anda perlu mengaitkan akun dan peran pengguna. Ini biasanya dilakukan di event handler AuthenticateRequest di file Global.asax.

    protected void Application_AuthenticateRequest (Pengirim objek, EventArgs e)
    {
    HttpApplication appl = (HttpApplication) pengirim;

    Jika (appl.Request.IsAuthenticated && appl.User.Identity adalah FormsIdentity)
    {
    Identitas FormsIdentity = (FormsIdentity) appl.User.Identity;

    DataTable tblUsers = (DataTable) Aplikasi ["UsersTable"];
    appl.Context.User = GenericPrincipal baru (identitas,
    string baru ((string) (tblUsers.Rows.Find (identity.Name) ["Peran"])));
    }
    }

    Kode memverifikasi jenis otentikasi pengguna dan itu sudah terdaftar. Nama pengguna diambil dari cookie oleh properti Nama. Tabel dengan nama pengguna dan perannya telah disimpan di objek Aplikasi untuk kinerja yang lebih baik. Dari tabel ini, kami menemukan peran pengguna, yang kami simpan di objek GenericPrincipal.

    Opsi otentikasi

    Jika parameter kedua dari fungsi RedirectFromLoginPage () salah, maka cookie sesi yang dihasilkan ASP.NET memiliki masa pakai default selama 30 menit. Untuk mengubah interval ini, gunakan parameter batas waktu dari tag formulir di file Web.config. Mari kita atur waktu otentikasi menjadi 3 jam.



    Ketika cookie sesi dikembalikan dalam permintaan berikutnya setelah pendaftaran, cookie akan diperbarui secara otomatis jika masa pakainya telah berlalu lebih dari setengahnya. Masa pakai cookie yang disimpan adalah 50 tahun.
    Anda dapat menentukan nama cookie otentikasi dengan menempatkannya di atribut nama (nama defaultnya adalah ASPXAUTH):



    Secara default, cookie otentikasi dienkripsi dan diverifikasi. Tingkat perlindungan dapat ditentukan melalui atribut perlindungan, yang defaultnya adalah Semua. Validasi hanya menentukan validasi cookie, sedangkan Enkripsi hanya menentukan enkripsi. Anda dapat sepenuhnya menonaktifkan perlindungan dengan menentukan nilai Tidak Ada. Masuk akal untuk menonaktifkan perlindungan jika data ditransfer melalui HTTPS.




    Setel ulang otentikasi formulir

    Registrasi ulang dapat dilihat di banyak situs. Metode FormsAuthentication.SignOut () digunakan untuk mengatur ulang otentikasi. Ini menetapkan tanggal kedaluwarsa cookie ke waktu yang telah berlalu dan cookie secara otomatis dihancurkan.

    Otentikasi Paspor

    Dengan otentikasi Paspor, pengguna dapat masuk ke situs Web yang berbeda menggunakan identitas Microsoft Passport yang sama. Ini membebaskan pengguna dari mendaftar di setiap situs, dan situs itu sendiri mendapatkan informasi pengguna dari profil yang disimpan oleh Microsoft.

    Untuk menggunakan otentikasi Paspor dalam aplikasi web, Anda perlu menginstal SDK Paspor. SDK Paspor gratis untuk pengujian, tetapi lisensi harus dibeli untuk penggunaan komersial di situs.
    Saat mengakses aplikasi dengan otentikasi Paspor, cookie diperiksa terhadap kredensial Paspor. Jika tidak ada file tersebut, pengguna akan diarahkan ke halaman pendaftaran Paspor.
    Untuk mengaktifkan mode otentikasi ini di Web. config Anda perlu menentukan yang berikut:

    Untuk pendaftaran wajib semua pengunjung situs di bagian otorisasi, Anda harus menolak akses ke pengguna yang tidak sah:



    Anda dapat mengakses informasi pengguna menggunakan acara PassportAuthentication _ OnAuthenticate di file Global.asax:

    protected void PassportAuthentication_OnAuthenticate (Pengirim objek, PassportAuthenticationEventArgs e)
    {
    System.Web.Security.PassportIdentity id = e.Identity;
    jika (id.IsAuthenticated)
    {
    Sesi ["PassportID"] = e.Identity.Name;
    Sesi ["Nama"] = e.Identity ["FirstName"] + e.Identity ["LastName":];
    Sesi ["Email"] = e.Identity ["PrefferedEmail"];
    }
    }

    Denis Kondratyev

    Saya mungkin salah, tetapi setelah berjam-jam menjelajahi web dan mencari, saya harus bertanya lagi kepada orang-orang hebat di sini di StackOverflow. Saya mencoba menambahkan pengontrol masuk ke situs WebForms aspx. Saya melakukan hal berikut:

    • Menambahkan nilai yang sesuai ke WebConfig.
    • Menyiapkan database saya dengan aspnet_regsql (Menggunakan framework v4.0 / Situs yang menjalankan 4.5 (Apakah ini masalah?)
    • Menambahkan CreateUserWizard dan memeriksa apakah pengguna ditambahkan ke database. (Pekerja)
    • Diperiksa apakah ID / Nama Aplikasi sama dengan pengguna yang mendapatkan tugas di database.

    Saya pertama kali mencoba memiliki formulir pendaftaran di situs saya menggunakan default.aspx dalam kombinasi dengan & ... Jika saya memberikan formulir dengan kredensial yang cocok dengan pengguna yang masuk ke Create eUserWizard, saya tidak mendapatkan kesalahan dan mengarahkan saya. Tapi saya masih belum login. Jika saya memasukkan kredensial palsu, itu memberi saya "kesalahan nama pengguna / kata sandi tidak valid" sehingga harus dapat menghubungkan dan memvalidasi kredensial.

    Saya agak bingung pada titik ini karena tidak ada kesalahan yang ditampilkan dan saya tidak yakin bagaimana saya harus terus mencari kesalahan. Saya juga mencoba menambahkan situs kedua bernama "login.aspx" dengan hasil yang sama.

    Konfigurasi Web Saya

    Formulir Masuk

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProperLogin.ascx.cs" Inherits="BlacjJack.ProperLogin" %>

    *
    *

    BuatWizardPengguna

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProperRegister.ascx.cs" Inherits="BlacjJack.ProperRegister" %>

    Apa TRIE d setelah mendapatkan beberapa saran dari kalian:

    • Menambahkan pintasan, ke AnonymouseTemplate, melewati tes User.Identity.isAuthenticated dan mengembalikan false. Bahkan kesalahan besar tidak terjadi.
    • Saya telah menginstal fiddler pada tangkapan layar di bawah, ia mendapat cookie ketika saya mengirimkan formulir login.

    Sekarang mari kita lanjutkan untuk menjelaskan proses otentikasi secara langsung dalam kerangka ASP.NET, di mana 3 jenis otentikasi disediakan untuk pilihan Anda:

    * Otentikasi Windows
    * Membentuk
    * Paspor

    Otentikasi Windows:

    Seperti namanya, metode ini bergantung pada akun Windows. Metode ini sesuai jika Anda membuat aplikasi untuk jaringan lokal, dan semua akun dan grup yang valid disimpan di domain yang telah ditentukan sebelumnya. Pada saat yang sama, Anda harus sangat berhati-hati saat menetapkan hak akses kepada pengguna, karena Anda secara bersamaan mengatur hak untuk bekerja di Windows. Untuk mengonfigurasi ASP.NET agar berfungsi dalam mode otentikasi Windows, Anda perlu mengubah file konfigurasi proyek Web Web.config atau, jika perlu, file konfigurasi seluruh server, yang terletak di alamat WINDOWS_FOLDERMicrosoft.NET

    Framework.NET versiCONFIGMachine.config. Dalam contoh kami, kami akan bekerja secara eksklusif dengan file proyek - Web.config, di mana Anda perlu menemukan bagian otentikasi dan mengatur atribut modenya ke Windows:

    Sekarang Anda dapat langsung mulai memprogram dan mengimplementasikan otentikasi berbasis Windows. Untuk membantu Anda, kelas WindowsIdentity, yang khusus untuk bekerja dengan otentikasi Windows. Secara umum, untuk otentikasi berbasis Windows, ada dua kelas utama yang disediakan oleh .NET Framework:

    * GenericIdentity - hanya mengimplementasikan antarmuka IIdentity dan tidak berlaku untuk jenis otentikasi tertentu
    * WindowsIdentity - juga merupakan implementasi dari antarmuka IIdentity, tetapi juga mencakup metode khusus untuk otentikasi berbasis Windows

    Nama pengguna dan nama grup disimpan di objek WindowsIdentity dalam format berikut: DOMAINUserName dan DOMAINGroup, masing-masing. Satu-satunya pengecualian adalah grup bawaan, misalnya grup Administrator; untuk mengaksesnya, Anda dapat menggunakan string koneksi melalui WindowsIdentity: BUILTINAadministrator. Atau, Anda dapat menentukan grup bawaan dari enumerasi System.Security.Principal.WindowsBuiltInRole.

    Dari gambar. 1 Anda dapat melihat bahwa objek WindowsIdentity memungkinkan Anda mendapatkan nama pengguna; menentukan jenis otentikasi; menetapkan apakah otentikasi dilakukan secara anonim; Anda juga dapat mengetahui apakah pengguna diautentikasi atau tidak, tamu atau pengguna sistem.

    Beras. 1 - objek WindowsIdentity

    Karena dalam aplikasi ASP.NET, Anda perlu membuat rantai berikut ini untuk mengakses objek WindowsIdentity:

    HttpContext.Current.User.Identity, maka Anda juga dapat menentukan peran apa yang dimiliki pengguna saat ini. Ini dapat dicapai karena fakta bahwa properti Pengguna dalam rantai ini mengimplementasikan antarmuka Iprincipal, yang memungkinkan Anda menentukan apakah pengguna termasuk dalam peran tertentu dengan memanggil fungsi IsInRole, yang memiliki sintaks berikut:

    Fungsi IsInRole yang Dapat Diganti Publik (peran ByVal Sebagai String) Sebagai Anggota Boolean dari: System.Security.Principal.Iprincipal

    Tapi mari kita menjauh dari teori kosong untuk sementara waktu dan mencoba menerapkan contoh praktis. Untuk melakukannya, buat proyek Aplikasi Web ASP.NET baru dan masukkan kode berikut:
    Default.aspx:

    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="AuthSample.WebForm1"%> Contoh Otentikasi

    Default.aspx.vb:

    Kelas Publik WebForm1 Mewarisi System.Web.UI.Page #Region “Kode yang Dihasilkan oleh Desainer Formulir Web” 'Panggilan ini diperlukan oleh Desainer Formulir Web. Private Sub InitializeComponent () End Sub 'CATATAN: Deklarasi placeholder berikut ini diperlukan oleh Web Form Designer. 'Jangan dihapus atau dipindahkan. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init (ByVal sender As System.Object, ByVal e As System.EventArgs) Menangani MyBase.Init 'CODEGEN: Panggilan metode ini diperlukan oleh Web Form Designer' Jangan ubah menggunakan editor kode ... InitializeComponent () End Sub #End Region Private Sub Page_Load (Pengirim ByVal Sebagai System.Object, ByVal e As System.EventArgs) Menangani MyBase.Load Dim s As String s = “

    Nama:“& HttpContext.Current.User.Identity.Name &“

    ” & _ “

    Jenis Autentikasi:“& HttpContext.Current.User.Identity.AuthenticationType.ToString &“

    ” & _ “

    Diautentikasi:“& HttpContext.Current.User.Identity.IsAuthenticated.ToString &“

    ” & _ “

    Apakah admin:“& HttpContext.Current.User.IsInRole (“ Administrator ”). ToString &“

    ”Respons.Tulis Kelas Akhir Sub Akhir

    Jika mode otentikasi Windows dipilih dan pengaturan IIS tidak menyebabkan konflik, maka Anda akan menerima informasi yang sesuai tentang pengguna Anda saat ini. Jika bidang untuk nama pengguna dan jenis otentikasi ternyata kosong, maka Anda hanya perlu mengkonfigurasi IIS, untuk melakukan ini, ikuti langkah-langkah ini:

    1. Buka IIS dan temukan direktori virtual dengan aplikasi ini
    2. Buka jendela properti untuk direktori ini dan buka tab Keamanan Direktori. Di kotak Akses dan Otentikasi Anonim, klik Ubah ...
    3. Di jendela yang muncul (Gbr. 2), hapus centang pada Akses Anonim

    Beras. 2 - Mengonfigurasi IIS

    Ini menyimpulkan diskusi kami tentang otentikasi berbasis Windows dan beralih ke otentikasi bentuk.

    Otentikasi formulir:

    Otentikasi formulir, atau otentikasi berbasis cookie seperti yang disebut juga, memiliki beberapa keunggulan dibandingkan otentikasi Windows.

    * Pertama, Anda memiliki kesempatan untuk menentukan selera dan warna Anda sendiri atau selera dan warna pengguna penampilan formulir pendaftaran alih-alih jenis jendela pendaftaran Windows yang sama.
    * Kedua, Anda memiliki kendali penuh atas informasi yang dimasukkan
    * Informasi pengguna sekarang dapat disimpan tidak hanya di SAM atau Active Directory, tetapi juga di penyimpanan lain, khususnya: database, direktori LDAP, file XML, atau file teks biasa.
    * Tidak perlu menautkan kebijakan keamanan server dengan kebijakan aplikasi Web, karena, seperti yang telah disebutkan, semua informasi pengguna dapat dipindahkan ke penyimpanan data terpisah tanpa tumpang tindih dengan akun OS.

    Namun terlepas dari banyaknya pilihan otentikasi berbasis formulir, ada satu batasan signifikan - pengguna harus mengizinkan cookie. Jika tidak ada, otentikasi formulir ASP.NET tidak akan berfungsi. Perhatikan kata-kata “…menggunakan alat ASP.NET…”. Ini berarti bahwa mekanisme yang membebaskan pengembang dari operasi rutin pemeriksaan tanpa akhir tidak akan berfungsi, dengan kata lain, semua permintaan yang diterima dari pengguna yang belum diautentikasi dialihkan ke halaman pendaftaran, di mana ia memasukkan informasi yang diperlukan ( paling sering nama pengguna dan kata sandi) ... Informasi yang diterima diteruskan ke lingkungan ASP.NET, di mana itu diverifikasi. Jika berhasil, pengguna dikirimi cookie, yang berisi tiket Otorisasi, nama pengguna, dan kunci untuk kemudian mendapatkan pengenal. Akibatnya, semua panggilan browser berikutnya akan berisi informasi otorisasi di header yang dikirim ke ASP.NET untuk validasi. Oleh karena itu, jika pengguna tidak mendukung cookie, maka semua pemeriksaan apakah dia telah diautentikasi perlu dilakukan secara manual, misalnya, di versi ASP sebelumnya, objek Sesi digunakan untuk ini, kira-kira dalam bentuk berikut:

    If Not Session (“Terdaftar”) = “1” Kemudian Response.Redirect (“login.asp”) End If

    Untuk menggunakan otentikasi formulir, Anda harus terlebih dahulu mengonfigurasi proyek Web Anda. Untuk melakukan ini, ubah konten tag file Web.config sebagai berikut:

    Mari kita lihat lebih dekat kode di atas. Atribut mode tag mendefinisikan metode otentikasi. Dalam contoh sebelumnya kami menggunakan nilai Windows yang mengonfigurasi otentikasi ke Mode Otentikasi Windows, sekarang kami menggunakan Mode Formulir untuk pekerjaan berbasis formulir. Selain dua konstanta ini, ada 2 lagi: Paspor dan Tidak Ada - yang pertama mendefinisikan otentikasi berdasarkan paspor, yang akan dibahas nanti, yang kedua menonaktifkannya sama sekali. Tanda berikutnya ( ) hanya melekat pada otentikasi berbasis formulir dan mencakup informasi berikut:

    * nama - nama cookie di mana data tentang otentikasi yang berhasil akan dimasukkan
    * loginUrl - menentukan alamat halaman tempat pengguna akan diarahkan untuk mendaftar
    * perlindungan - menerima Semua | Tidak Ada | Enkripsi | Validasi dan mendefinisikan bagaimana data dalam cookie dilindungi. Dari nilai yang dapat diterima jelas bahwa Anda tidak dapat melakukan apa pun dengan data yang diterima dan menerimanya apa adanya; Anda dapat memeriksanya; dapat dienkripsi; dan juga dimungkinkan untuk menggabungkan verifikasi dengan kriptografi - nilai ini digunakan secara default.
    * batas waktu - menentukan lamanya waktu dalam detik selama cookie akan tersedia
    * path - Atribut ini menentukan path lengkap ke cookie. Secara default, ini berisi garis miring (/) yang memperluas semua jalur. Mengubah setelan ini tidak disarankan karena beberapa browser peka huruf besar/kecil di jalurnya, jadi mengubah setelan ini dapat membuat beberapa pengguna tidak dapat mengautentikasi.
    * requireSSL - atribut ini menerima nilai True atau False (secara default) dan menentukan apakah akan menggunakan protokol Secured Sockets Layer (SSL)
    * slidingExpiration - Menunjukkan apakah cookie dan kredensial otorisasi harus dibuat ulang jika batas waktu habis. Menerima nilai true (default) atau false.

    Semua atribut yang mungkin dari bagian formulir dijelaskan di atas, tetapi agar aplikasi berfungsi dengan benar, cukup menggunakan hanya 3 di antaranya, seperti yang ditunjukkan dalam daftar berikut:

    Otentikasi formulir menggunakan file XML terpisah:

    Sekarang mari kita buat halaman pendaftaran pengguna sederhana yang memverifikasi nama pengguna dan kata sandi yang dimasukkan terhadap data dalam file XML. Untuk melakukannya, pertama buat file XML bernama users.xml dengan contoh berikut:
    pengguna.xml:

    John satu mike dua Tagihan tiga

    Basis pengguna sudah siap - sekarang Anda dapat mulai membuat contoh proyek pendaftaran pengguna. Semua kode yang diperlukan ditunjukkan di bawah ini:
    Default.aspx:

    <%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”default.aspx.vb” Inherits=”FormAuth._default”%> bawaan

    Default.aspx.vb:

    Mengimpor System.Web.Security Public Class _default Mewarisi System.Web.UI.Page #Region “Kode yang Dibuat Perancang Formulir Web“ 'Panggilan ini diperlukan oleh Perancang Formulir Web. Private Sub InitializeComponent () End Sub 'CATATAN: Deklarasi placeholder berikut ini diperlukan oleh Web Form Designer. 'Jangan dihapus atau dipindahkan. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init (ByVal sender As System.Object, ByVal e As System.EventArgs) Menangani MyBase.Init 'CODEGEN: Panggilan metode ini diperlukan oleh Web Form Designer' Jangan ubah menggunakan editor kode ... InitializeComponent () End Sub #End Region Private Sub Page_Load (Pengirim ByVal Sebagai System.Object, ByVal e As System.EventArgs) Menangani MyBase.Load 'Masukkan kode pengguna untuk menginisialisasi halaman di sini If context.Current.User.Identity.Name = “” Kemudian Response.Redirect (“login.aspx”) Lain Response.Write (“

    ”) End If End Sub End Kelas

    <%@ Page Language=”vb” AutoEventWireup=”false” Codebehind=”login.aspx.vb” Inherits=”FormAuth.WebForm1”%> Registrasi

    Nama
    Kata sandi

    Otentikasi gagal

    Mengimpor System.Xml Mengimpor System.Web.Keamanan Kelas Umum WebForm1 Mewarisi System.Web.UI.Halaman Dilindungi Dengan Peristiwa txtName As System.Web.UI.WebControls.TextBox Dilindungi Dengan Peristiwa txtPassword Sebagai System.Web.UI.WebControls.TextBox Dilindungi DenganEvents As System.Web.UI.WebControls.Label Dilindungi Dengan Peristiwa btnLogin Sebagai System.Web.UI.WebControls.Button #Region “Kode yang Dihasilkan oleh Desainer Formulir Web“ 'Panggilan ini diperlukan oleh Desainer Formulir Web. Private Sub InitializeComponent () End Sub 'CATATAN: Deklarasi placeholder berikut ini diperlukan oleh Web Form Designer. 'Jangan dihapus atau dipindahkan. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init (ByVal sender As System.Object, ByVal e As System.EventArgs) Menangani MyBase.Init 'CODEGEN: Panggilan metode ini diperlukan oleh Web Form Designer' Jangan ubah menggunakan editor kode ... InitializeComponent () End Sub #End Region Private Sub btnLogin_Click (ByVal sender As Object, ByVal e As EventArgs) Menangani btnLogin.Click Dim xd As New XmlDocument, xr As XmlNodeReader Dim sName As String, sPass As String "Buka file XML xd. Muat (Server.MapPath (“users.xml”)) 'Mengaktifkan XmlNodeReader xr = New XmlNodeReader (xd.Item (“users”)) "Mencari pengguna yang diinginkan Sementara xr.Read If xr.Name =" name ”Dan xr .NodeType = XmlNodeType.Element Kemudian sName = xr.ReadString "Jika bukan nama pengguna, lanjutkan ke If sName lain<>txtName.Text Kemudian xr.Skip() ElseIf xr.Name = “password” Dan xr.NodeType = XmlNodeType.Element Kemudian If xr.ReadString() = txtPassword.Text Kemudian “Jika password cocok, maka otentikasi berhasil FormsAuthentication.RedageFromLogin txtName.Text, True) Else "Jika tidak, maka pergi ke pengguna lain xr.Lewati () End If End If End While" Jika baris ini dijalankan, maka data tentang pengguna yang dimasukkan salah lbl.Visible = True End Sub Kelas Akhir

    Mari kita lakukan pembekalan sekarang: kode di atas berisi 2 halaman. Semua tindakan dimulai pada halaman default.aspx, yang memeriksa apakah pengguna saat ini memiliki nama:

    Jika context.Current.User.Identity.Name = “” Kemudian Response.Redirect (“login.aspx”) Lain Response.Write (“

    Halo “& konteks.Saat ini.Pengguna.Identitas.Nama &“

    ") Berakhir jika

    Jika ya, salam akan ditampilkan di layar, jika tidak, pengguna akan diarahkan ke halaman pendaftaran login.aspx, di mana ia akan diminta untuk memasukkan nama dan kata sandinya. Informasi yang dimasukkan diperiksa terhadap data dari file XML. Jika pengguna tidak ditemukan, pesan kesalahan akan muncul (Gbr. 3), jika tidak, ia akan dialihkan dengan aman ke halaman beranda default.aspx, yang, setelah mendeteksi bahwa pengguna saat ini memiliki nama, akan menyapanya.

    Beras. 3 - Data pendaftaran salah

    Jika Anda berhasil mengautentikasi dan melihat pesan selamat datang, tutup jendela browser Anda dan coba jalankan kembali halaman default.aspx. Anda akan segera melihat salam di depan Anda untuk pengguna yang namanya Anda masukkan terakhir kali. Intinya adalah bahwa selama pendaftaran kami menyimpan cookie di mesin klien. Ini terjadi pada saat kita memanggil fungsi RedirectFromLoginPage dalam kode, meneruskannya ke parameter CreatePersistentCookie True:

    FormsAuthentication.RedirectFromLoginPage (txtName.Text, True)

    Untuk mengecualikan transmisi cookie, cukup memanggil fungsi ini dengan nilai False dari parameter CreatePersistentCookie. Atau ada cara lain - di halaman default.aspx tambahkan handler untuk acara bongkar halaman dengan kode berikut:

    Sub Page_Unload Pribadi (Pengirim ByVal Sebagai Objek, ByVal e Sebagai System.EventArgs) Menangani MyBase.Unload FormsAuthentication.SignOut () End Sub

    Akibatnya, setelah halaman utama dibongkar, pengguna akan logout.

    Otentikasi formulir menggunakan file konfigurasi:

    Pada contoh sebelumnya, kami menyimpan semua data pengguna dalam file XML terpisah, tetapi ternyata ASP.NET menyediakan kemampuan untuk menyimpan informasi akun secara langsung di file konfigurasi proyek web. Keuntungan dari metode ini adalah membutuhkan kode pemrograman yang jauh lebih sedikit untuk diimplementasikan, karena dalam hal ini programmer tidak perlu memindai file XML secara manual untuk mencari kecocokan yang cocok - ini hanya memanggil satu fungsi tunggal yang menyelesaikan keseluruhan kasus. Untuk memahami cara kerja mekanisme ini, mari sekali lagi merujuk ke file konfigurasi, atau lebih tepatnya ke tag formulir. Tag ini, selain atribut yang dijelaskan sebelumnya, juga dapat menyertakan bagian - sertifikat:
    Web.config:

    Seperti yang Anda lihat dari daftar di atas, tag kredensial berisi satu atribut - passwordFormat. Parameter ini menentukan cara menyimpan kata sandi dan mengambil nilai berikut:

    * Hapus - kata sandi disimpan tanpa perubahan apa pun
    * SHA1 - kata sandi di-hash menggunakan metode SHA1 (Secure Hash Algorithm versi 1)
    * MD5 - kata sandi di-hash menggunakan metode MD5 (Message Digest versi 5)

    Jika Anda memilih salah satu algoritme hashing, maka kata sandi tidak dapat lagi disimpan dalam bentuk aslinya di file konfigurasi - kata sandi harus di-hash terlebih dahulu dan baru kemudian hasil yang dihasilkan harus ditetapkan ke atribut kata sandi. Jika tidak, ketika ASP.NET mengautentikasi, kata sandi tidak akan cocok.

    Sekarang kita memiliki basis akun yang baru dibuat, mari kembali ke aplikasi sebelumnya dan ubah kode untuk tombol registrasi klik event handler di halaman login.aspx:
    login.aspx.vb:

    Private Sub btnLogin_Click (ByVal sender As Object, ByVal e As EventArgs) Menangani btnLogin.Click If FormsAuthentication.Authenticate (txtName.Text, txtPassword.Text) Kemudian "Jika pengguna ditemukan di bagian sertifikat, berarti pendaftaran FormsAuthentication berhasil. Otentikasi txtName.Text, False) Else "Jika tidak - tampilkan pesan kesalahan lbl.Visible = True End If End Sub

    Sekarang bandingkan kode ini dengan yang digunakan pada contoh sebelumnya. Seperti yang Anda lihat, itu telah dikurangi dari banyak kondisi dan enumerasi menjadi hanya satu kueri yang mengembalikan Benar atau Salah.

    Kami tidak akan secara khusus mempertimbangkan sekarang contoh kode yang berfungsi dengan kata sandi hash, agar tidak terburu-buru. Faktanya adalah bahwa di bagian ke-3 artikel ini, yang akan dikhususkan untuk kriptografi, Anda akan belajar tentang semua seluk-beluk hashing dan enkripsi data dan Anda akan dapat menerapkan metode ini dalam praktik sendiri.

    Otentikasi formulir menggunakan database:

    Sekarang mari kita lihat contoh bekerja dengan penyimpanan data pengguna lain - database MS SQL Server. Sebagian besar situs dinamis menggunakan database untuk menyimpan konten situs. Informasi pengguna juga tidak terkecuali dan mungkin terjadi di kumpulan data umum. Untuk melihat dengan mata kepala sendiri bagaimana semua ini terjadi, mari buat aplikasi pengujian, yang akan kembali didasarkan pada halaman pendaftaran yang sudah kita ketahui, yang digunakan pada contoh sebelumnya. Pertama-tama, Anda perlu menyiapkan database, untuk ini buka utilitas SQL Query Analyzer dan jalankan kode berikut yang ditulis dalam bahasa tSQL di dalamnya:
    FormAuthUsers.sql:

    Buat database 'FormAuthUsers' dan tambahkan tabel 'Users' CREATE DATABASE FormAuthUsers GO GUNAKAN FormAuthUsers GO CREATE TABLE (IDENTITAS (1, 1) NOT NULL, (50), (50), CONSTRAINT PRIMARY KEY CLUSTERED () ON) ON GO - Fill tabel 'Users' INSERT INTO Users (UserName, Password) VALUES ('John', 'one') GO INSERT INTO Users (UserName, Password) VALUES ('Mike', 'two') GO INSERT INTO Users (UserName, Password ) VALUES ('Bill', 'three') GO --Create procedure 'FindUser' CREATE PROCEDURE FindUser @Name nvarchar (50), @Password nvarchar (50) AS SELECT COUNT (ID) FROM Users WHERE UserName = @Name AND Password = @Password GO

    Sebagai hasil dari mengeksekusi kode ini, database bernama "FormAuthUsers" harus dibuat di SQL Server Anda, di mana Anda dapat menemukan tabel Users dengan tiga record dan prosedur tersimpan FindUser. Prosedur ini mengembalikan jumlah pengguna yang memenuhi permintaan, yang dibentuk dari parameter yang diteruskan ke prosedur ini.

    Sekarang setelah database kita siap, kita dapat mulai membuat halaman yang akan bekerja dengannya. Untuk melakukannya, ambil kembali contoh sebelumnya dan ganti event handler klik tombol pada halaman login.aspx:
    login.aspx.vb:

    Mengimpor System.Data.SqlClient Mengimpor System.Web.Keamanan Kelas Umum WebForm1 Mewarisi System.Web.UI.Halaman Dilindungi Dengan Peristiwa txtName As System.Web.UI.WebControls.TextBox Dilindungi Dengan Peristiwa txtPassword Sebagai System.Web.UI.WebControls.TextBox Dilindungi WithEvents lbl As System.Web.UI.WebControls.Label Dilindungi DenganEvents btnLogin As System.Web.UI.WebControls.Button #Region “Kode Buatan Formulir Web Designer“ 'Panggilan ini diperlukan oleh Web Form Designer. Private Sub InitializeComponent () End Sub 'CATATAN: Deklarasi placeholder berikut ini diperlukan oleh Web Form Designer. 'Jangan dihapus atau dipindahkan. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init (ByVal sender As System.Object, ByVal e As System.EventArgs) Menangani MyBase.Init 'CODEGEN: Panggilan metode ini diperlukan oleh Web Form Designer' Jangan ubah menggunakan editor kode ... InitializeComponent () End Sub #End Region Private Sub btnLogin_Click (ByVal sender As Object, ByVal e As EventArgs) Menangani btnLogin.Click Dim cn As New SqlConnection (“server = localhost; database = FormAuthUsers; uid = sa; pwd =;”) Dim cm As New SqlCommand (“FindUser”, cn) Dim n As Integer "Buka koneksi Coba cn.Open () Tangkap ex As SqlException Response.Write (ex.Message) Exit Sub End Try" Setel jenis perintah cm.CommandType = CommandType .StoredProcedure "Tambahkan parameter nama Dim prmName = New SqlParameter (“ @ Name ”, SqlDbType.NvarChar, 50) prmName.Value = txtName.Text cm.Parameters.Add (prmName)" Tambahkan parameter kata sandi Dim prmPass = Baru “@ SqlParameter Password ”, SqlDbType.NvarChar, 50) prmPass.Value = txtPassword.Text cm.Parameters.Add (prmPass)" Jalankan permintaan n = cm.ExecuteScalar If n> 0 Kemudian "Jika seseorang ditemukan, maka pendaftaran FormsAuthentication .RedirectFromLoginPage berhasil (txtName.Text, False) Else "jika tidak ada, maka ada kesalahan lbl.Visible = True End Jika cn.Close () End Sub End Class

    Agar halaman ini berfungsi dengan benar, pastikan string koneksi cocok dengan konfigurasi Anda. Mari kita lihat apa yang terjadi di sini. Pertama, objek koneksi SqlConnection dibuat, dan string koneksi database dilewatkan sebagai parameter padanya:

    Dim cn Sebagai SqlConnection Baru (“server = localhost; database = FormAuthUsers; uid = sa; pwd =;”)

    Setelah itu, sebuah instance dari objek SqlCommand dibuat, yang digunakan untuk menjalankan perintah untuk bekerja dengan data. Baris kode berikut membuka koneksi, tetapi ini memperhitungkan kemungkinan pengecualian yang ditangkap oleh penangan coba pengecualian:

    "Membuka koneksi Coba cn.Open () Tangkap ex As SqlException Response.Write (ex.Message) Keluar Sub Akhir Coba

    Jika ada kegagalan saat membuka koneksi, pengguna menerima pesan yang sesuai dan operasi dibatalkan.

    SqlCommand kemudian dikonfigurasi untuk menjalankan prosedur tersimpan dan parameter disiapkan untuk menjalankannya. Untuk 7 baris kode ini tentunya ada alternatif yang terdiri dari 1 baris kode:

    cm.CommandText = "exec FindUser" "& txtName.Text &" "," "& txtPassword.Text &" ""

    Namun, terlepas dari kenyataan bahwa kode ini lebih pendek, runtime akan lebih lama. Mengapa? Faktanya adalah bahwa dengan baris ini Anda membuat kueri operasional, yaitu, Anda menulis langsung perintah SQL yang memanggil prosedur tersimpan. Akibatnya, Anda mengirimkan data tambahan melalui jaringan dalam bentuk perintah "exec", yang pada gilirannya mengambil ruang di lalu lintas jaringan; segera setelah permintaan ini mencapai server, perintah "exec" akan dijalankan terlebih dahulu, dan baru kemudian prosedur tersimpan FindUser yang kita butuhkan akan diluncurkan. Selain itu, ada cara yang lebih sulit, yaitu membuang prosedur tersimpan dan menyuntikkan semua kode kueri yang diperlukan langsung ke objek SqlCommand, sebagai akibatnya lebih banyak informasi tambahan dikirim melalui lalu lintas jaringan. Tampaknya ini adalah plus atau minus beberapa puluh byte, tetapi bagaimana jika Anda harus bekerja dengan permintaan besar, yang kodenya jauh lebih besar daripada prosedur kami? Oleh karena itu, yang paling jalan terbaik adalah penggunaan prosedur tersimpan, karena dalam hal ini Anda mendapatkan pemisahan tugas yang jelas, di mana halaman klien hanya bertanggung jawab atas input-output data dalam bentuk yang dapat diakses oleh pengguna; SQL Server melakukan semua operasi data; dan IIS bertindak sebagai perantara antara klien dan server - di sana Anda memiliki arsitektur tiga tingkat. Jangan membebani mesin klien "halus" dengan pekerjaan yang tidak perlu - lebih baik untuk mempercayakannya ke artileri berat, yaitu server.

    Tapi mari kita kembali ke kode kita dan melanjutkan penguraiannya: setelah menentukan jenis perintah dan menyiapkan semua parameter, kita menjalankan perintah ini dengan aman, apalagi, perhatikan bahwa fungsi ExecuteScalar digunakan untuk eksekusi. Ini harus digunakan ketika Anda mendapatkan nilai skalar sebagai hasilnya, yaitu, angka, yang sebenarnya terjadi dalam prosedur FindUser kami - ini mengembalikan jumlah catatan yang memenuhi kondisi tertentu:

    Di akhir kode, setelah menerima jumlah catatan yang ditemukan, kami hanya mengurai nilai ini dan melakukan operasi yang sesuai.
    Otentikasi formulir menggunakan layanan web:

    Katakanlah Anda bekerja untuk organisasi XYZ. Anda telah ditugaskan untuk membuat aplikasi yang mengelola informasi personalia untuk organisasi Anda. Anda telah mengerjakan proyek ini selama 7 bulan, dan tiba-tiba, untuk alasan keamanan, Anda diperintahkan untuk meng-host informasi tentang pengguna di server yang sama sekali berbeda, yang dengannya departemen lain dari organisasi XYZ bekerja secara aktif. Anda tidak diberikan akses langsung ke server, sehingga proyek Anda tidak dapat mengakses database secara langsung dengan pengguna yang berada di server ini. Untuk mengatasi masalah ini, diputuskan untuk membiarkan Anda mengembangkan layanan Web di mana Anda dapat melakukan kontrol atas otentikasi pengguna.

    Kisah fiksi ini mengungkapkan cara lain untuk mengizinkan otentikasi - menggunakan layanan Web. Layanan web sangat berguna ketika Anda atau klien Anda tidak memiliki akses penuh ke server. Selain itu, layanan Web tidak hanya berlaku untuk aplikasi Web, tetapi juga dapat digunakan oleh produk perangkat lunak yang berjalan di berbagai platform. Hal ini dimungkinkan dengan penggunaan teknologi SOAP (Simple Object Access Protocol), yang menggunakan port TCP/IP standar dan protokol HTTP.

    Untuk bekerja dengan layanan Web, Anda harus membuatnya terlebih dahulu. Untuk melakukannya, mulai proyek baru jenis ASP.NET Web Service (Gambar 4).

    Beras. 4 - Membuat Layanan Web

    Sekarang, dengan menggunakan tombol register klik kode event handler dari contoh sebelumnya, tempelkan ke kode sumber layanan Web, ubah sedikit menjadi bentuk berikut:
    AuthSrvc.asmx:

    Mengimpor System.Web.Services Mengimpor System.Data.SqlClient _ Public Class Service1 Mewarisi System.Web.Services.WebService #Region "Kode Buatan Web Services Designer" Public Sub New () MyBase.New () "Panggilan ini diperlukan oleh Web Services Designer. InitializeComponent ()" Tambahkan inisialisasi Anda sendiri kode setelah InitializeComponent () panggilan End Sub "Diperlukan oleh Web Services Designer Private component As System.ComponentModel.IContainer" CATATAN: Prosedur berikut ini diperlukan oleh Web Services Designer "Dapat dimodifikasi menggunakan Web Services Designer." tidak memodifikasinya menggunakan editor kode. Private Sub InitializeComponent () component = New System.ComponentModel.Container () End Sub Protected Overloads Overrides Sub Dispose (ByVal membuang Sebagai Boolean) "CODEGEN: Prosedur ini diperlukan oleh Web Services Designer" Jangan ubah menggunakan editor kode. Jika membuang Kemudian Jika Tidak (komponen Tidak Ada) Kemudian Komponen. Buang () End If End If MyBase.Dispose (membuang) End Sub #End Region "Fungsi yang memeriksa apakah pengguna dengan nama pengguna dan kata sandi yang diberikan ada Otentikasi Fungsi Publik (ByVal UserName As String, ByVal Password As String, ByRef ErrMessage As String) As Boolean Dim cn As New SqlConnection ("server = localhost; database = FormAuthUsers; uid = sa; pwd =;") Dim cm As New SqlCommand ("FindUser", cn) Dim n As Integer "Buka koneksi Coba cn.Open () Tangkap ex As SqlException" Jika ada pengecualian, maka berikan deskripsinya ke parameter ErrMessage ErrMessage = ex.Message Keluar Fungsi Akhir Coba "Set ketik perintah cm CommandType = CommandType.StoredProcedure "Menambahkan parameter nama Dim prmName = New SqlParameter (" @ Name ", SqlDbType.NVarChar, 50) prmName.Value = UserName cm.Parameters.Add (prmName)" Menambahkan parameter kata sandi DimqlPass = New @Password ", SqlDbType.NVarChar, 50) prmPass.Value = Password cm.Parameters.Add (prmPass)" Jalankan permintaan n = cm.ExecuteScalar "Tutup koneksi cn.Close ()" Analisis hasilnya Jika n> 0 Kemudian "Jika seseorang telah ditemukan, maka pendaftaran telah selesai berhasil Mengembalikan True Else "jika tidak ada, maka kesalahannya adalah Return False End If End Function End Class

    Anda dapat memeriksa kemudahan servis layanan tanpa meninggalkan checkout, cukup mulai untuk dieksekusi di lingkungan Visual Studio .NET. Jika tidak ada kesalahan dalam layanan, Anda akan melihat layar di depan Anda dengan 2 hyperlink. Salah satunya mengarah ke deskripsi layanan Web menggunakan WSDL (Web Service Description Language), dan yang lainnya (Otentikasi) memungkinkan Anda menguji layanan. Klik hyperlink kedua dan isi tabel parameter pada halaman yang muncul (Gbr. 5). Jika Anda memasukkan string "John" di bidang UserName, dan mengganti "satu" untuk kata sandi, fungsi akan mengembalikan True:

    http: //localhost/AuthSrvc/AuthSrvc.asmx/Otentikasi: benar

    Jika Anda mengubah nilai salah satu bidang ini menjadi tidak valid, yaitu menjadi sesuatu yang tidak ada dalam database, maka hasilnya akan menjadi sebaliknya - Salah.

    Saya pikir tidak masuk akal untuk menganalisis kode fungsi ini secara rinci, karena dalam banyak hal mirip dengan pendahulunya dari contoh sebelumnya. Namun, bagaimanapun, Anda harus memberi perhatian khusus pada penangan pengecualian. Jika dalam daftar dengan database, ketika ada pengecualian, itu hanya menampilkan pesan yang sesuai di layar, maka di layanan Web kami meneruskan pesan kesalahan ke parameter ErrMessage dari fungsi Otentikasi, yang dideklarasikan dengan referensi :.

    "Membuka koneksi Coba cn.Open() Catch ex As SqlException" Jika ada pengecualian, maka berikan deskripsinya ke parameter ErrMessage ErrMessage = ex.Message Exit Function End Try

    Dalam aplikasi yang akan menggunakan layanan ini, kami akan membuat pemeriksaan untuk pengecualian apa pun, dan jika ditemukan, kami akan menampilkan pesan yang sesuai.

    Beras. 5 - Memeriksa kesehatan layanan Web

    Sekarang mari kita buat aplikasi yang akan menggunakan layanan Web ini, tetapi kali ini kita akan keluar dari topik dan membuat aplikasi Windows untuk perubahan:

    1. Buat proyek baru jenis Aplikasi Windows
    2. Ubah bentuknya sehingga menyerupai bentuk yang ditunjukkan pada gambar. 6, atau Anda bisa memasukkan kode ke konstruktor dari daftar berikut.
    3. Di jendela SolutionExplorer, klik kanan folder References dan pilih Add Web Reference ... dari menu konteks yang muncul.
    4. Anda akan melihat dialog untuk mengatur tautan ke layanan Web. Di kotak URL, masukkan URL lengkap ke file .asmx dan mulai pencarian. Akibatnya, Anda akan melihat sesuatu yang mirip dengan Gambar 7.
    5. Klik tombol Tambah Referensi dan tautan ke layanan Web yang ditentukan akan muncul di proyek Anda.
    6.

    Beras. 6 - Perkiraan tampilan aplikasi uji

    Beras. 7 - Hasil pencarian layanan web

    Sekarang Anda dapat mulai menulis kode yang mengimplementasikan layanan Web ini. Semua kode yang diperlukan ditunjukkan di bawah ini:
    AuthSrvcRelease.vb:

    Public Class Form1 Mewarisi System.Windows.Forms.Form #Region "Windows Form Designer generate code" Public Sub New () MyBase.New () "Panggilan ini diperlukan oleh Windows Form Designer. InitializeComponent ()" Tambahkan inisialisasi apa pun setelah InitializeComponent () panggil End Sub "Form menimpa buang untuk membersihkan daftar komponen. Overload yang Dilindungi Mengganti Sub Buang (ByVal membuang Sebagai Boolean) Jika membuang Kemudian Jika Tidak (komponen Tidak Ada) Kemudian Komponen. Buang () Akhir Jika Berakhir Jika MyBase. Buang (membuang) End Sub "Diperlukan oleh Windows Form Designer Private component Sebagai System.ComponentModel.IContainer" CATATAN: Prosedur berikut ini diperlukan oleh Windows Form Designer "Dapat dimodifikasi menggunakan Windows Form Designer. "Jangan memodifikasinya menggunakan editor kode. Berteman Dengan Events Label1 Sebagai System.Windows.Forms.Label Berteman DenganEvents Label2 Sebagai System.Windows.Forms.Label Berteman DenganEvents txtName As System.Windows.Forms.TextBox Berteman DenganEvents txtPassword As System.Windows .Forms.TextBox Berteman Dengan Events cmdKeluar Sebagai System.Windows.Forms.Button Berteman DenganEvents cmdLogin Sebagai System.Windows.Forms.Button Private Sub InitializeComponent () Me.Label1 = New System.Windows.Forms.Label Me.Label2 = New System.Windows.Forms.Label Me.txtName = New System.Windows.Forms.TextBox Me.txtPassword = New System.Windows. Forms.TextBox Me.cmdExit = Sistem Baru.Windows.Forms.Button Me.cmdLogin = Sistem Baru.Windows.Forms.Button Me.SuspendLayout () "" Label1 "Me.Label1.Location = Sistem Baru.Drawing.Point (8 , 8) Me.Label1.Name = "Label1" Me.Label1.Size = Sistem Baru.Drawing.Size (40, 16) Me.Label1.TabIndex = 0 Me.Label1.Text = "Name:" "" Label2 " Me.Label2.Location = Sistem.Drawing.Point Baru (8, 40) Me.Label2.Name = "Label2" Me.Label2.Size = Sistem Baru.Drawing.Size (64, 16) Me.Label2.TabIndex = 1 Me.Label2.Text = "Password:" "" txtName "Me.txtName.Location = New System.Drawing.Point (80, 5) Me.txtName.Name =" txtName "Me.txtName.Size = New System.Drawing .Size (216, 20) Me.txtName.TabIndex = 2 Me.txtName.Text = "" "" txtPassword "Me.txtPassword.Location = Sistem Baru.Drawing.Point (8 0, 37) Me.txtPassword.Name = "txtPassword" Me.txtPassword.PasswordChar = Microsoft.VisualBasic.ChrW (42) Me.txtPassword.Size = New System.Drawing.Size (216, 20) Me.txtPassword.TabIndex = 3 Me.txtPassword.Text = "" "" cmdExit "Me.cmdExit.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.cmdExit.Location = Sistem Baru.Drawing.Point (216, 72) Me.cmdExit.Name = "cmdExit" Me.cmdExit.Size = New System.Drawing.Size (80, 24) Me.cmdExit.TabIndex = 4 Me.cmdExit.Text = "Exit" "" cmdLogin "Me.cmdLogin.Location = Sistem Baru. Drawing.Point (128, 72) Me.cmdLogin.Name = "cmdLogin" Me.cmdLogin.Size = Sistem Baru.Drawing.Size (80, 24) Me.cmdLogin.TabIndex = 5 Me.cmdLogin.Text = "Login" "" Form1 "Me.AcceptButton = Me.cmdLogin Me.AutoScaleBaseSize = New System.Drawing.Size (5, 13) Me.CancelButton = Me.cmdExit Me.ClientSize = New System.Drawing.Size (304, 103) Me. Controls.Add (Me.cmdLogin) Me.Controls.Add (Me.cmdExit) Me.Controls.Add (Me.txtPassword) Me.Controls.Add (Me.txtNam e) Me.Controls.Add (Me.Label2) Me.Controls.Add (Me.Label1) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog Me.MaximizeBox = False Me.MinimizeBox = False Me.Name = " Form1 "Me.Text =" Aplikasi Uji AuthSrvc "Me.ResumeLayout (False) End Sub #End Region Private Sub cmdLogin_Click (Pengirim ByVal Sebagai System.Object, ByVal e As System.EventArgs) Menangani cmdLogin.Click" Setel tautan ke Redupkan objek au As New localhost.Service1 Dim sErr As String, bln As Boolean "Memeriksa Kursor = Kursor. WaitCursor bln = au.Authenticate (txtName.Text, txtPassword.Text, sErr) Cursor = Cursors.Default "- Tapi pertama-tama, mari kita pertimbangkan kemungkinan pengecualian If sErr<>"" Lalu MsgBox (sErr) Keluar Sub End If "- Dan sekarang masuk ke centang utama If bln = True Then MsgBox (" Halo "& txtName.Text, MsgBoxStyle.Information) Else MsgBox ("Data salah!", MsgBoxStyle. Seru ) End If End Sub Private Sub cmdExit_Click (ByVal sender As System.Object, ByVal e As System.EventArgs) Menangani cmdExit.Click End End Sub End Class

    Dalam contoh ini, Anda dapat melihat kode yang sangat sederhana, yang terdiri dari panggilan sederhana ke fungsi yang melakukan semua operasi yang diperlukan.

    Seperti disebutkan sebelumnya, layanan Web berbasis SOAP dan oleh karena itu dapat digunakan oleh aplikasi yang berjalan pada platform yang sama sekali berbeda. Kami tidak akan melangkah terlalu jauh dengan meninggalkan Windows, tetapi kami akan mencoba memanggil layanan Web yang sama ini tanpa menggunakan teknologi .NET, yaitu langsung melalui SOAP. Untuk melakukannya, buat file skrip berikut dalam Visual Basic Script Edition (VBScript) dan jalankan:
    SOAP.vbs:

    "Buat instance objek Set SoapClient sc = CreateObject (" MSSOAP.SoapClient ")" Sambungkan ke layanan web dan panggil metode Otentikasi sc.mssoapinit "http: //localhost/AuthSrvc/AuthSrvc.asmx? WSDL" Jika sc .Authenticate (" John "," one ", s) = True Then MsgBox" Hello John ", 64 Else MsgBox" Data salah !! ", 48 End If" Hapus referensi ke Set sc = Tidak ada

    Seperti yang Anda lihat, menggunakan model objek SOAP, Anda dapat mengakses layanan Web dalam berbagai bahasa pemrograman (bahkan skrip!) Dan platform.

    Tapi tidak semuanya sesempurna kelihatannya. Di bawah bungkus layanan Web yang indah, ada jebakan, pertama-tama, keamanan mereka sendiri. Layanan web memiliki struktur XML yang tidak terlindungi yang dapat dicegat untuk dengan mudah memahami dan mengambil data yang dikirimkan. Untuk mengecualikan, atau lebih tepatnya mengurangi kemungkinan kebocoran informasi tersebut, perlu untuk mengamankan layanan web. Ada sejumlah teknologi untuk tujuan ini, tetapi yang paling umum hanya tiga di antaranya: Aturan firewall, Secure Sockets Layer (SSL) dan Virtual Private Network (VPN).

    Jika Anda tahu persis komputer mana yang akan mengakses layanan Web Anda, maka dalam hal ini opsi menggunakan aturan Firewall cocok untuk Anda, di mana Anda dapat mengatur batasan dan hak untuk alamat IP tertentu, jadi metode ini lebih berlaku untuk jaringan lokal tempat Anda melakukannya tidak perlu terlalu khawatir tentang kerahasiaan informasi yang dikirimkan. Alat yang sangat nyaman untuk ini adalah Microsoft Security and Acceleration (ISA) Server. Ini menawarkan aturan kebijakan lanjutan untuk membatasi atau, sebaliknya, membuka akses ke informasi untuk pelanggan tertentu.

    SSL paling cocok untuk jaringan Internet. Saat menggunakannya, data dienkripsi dan dikirimkan antara server dan klien; data yang diterima kemudian diautentikasi, dengan demikian memeriksa apakah data ini berasal dari sumbernya. Ini terjadi dengan penggunaan sertifikat yang harus ditempatkan di server dan klien, oleh karena itu, di satu sisi, menggunakan sertifikat memungkinkan Anda memastikan bahwa data masuk ke tangan kanan tetapi di sisi lain, Anda perlu memastikan bahwa penerima memiliki sertifikat yang sesuai. Jadi, untuk menggunakan SSL, Anda memerlukan:

    1. Dapatkan sertifikat: ada sertifikat komersial dan uji coba. Perbedaan di antara mereka adalah bahwa yang komersial akan terdaftar secara resmi untuk pembeli dan, karenanya, akan membutuhkan biaya, sedangkan yang uji coba dapat diperoleh secara gratis, tetapi pada saat yang sama tanpa pendaftaran resmi. Sertifikat dapat diperoleh di alamat berikut: http://www.verisign.com/. Tetapi apa pun jenis sertifikat yang Anda pesan, Anda masih perlu mengunduh 2: satu untuk server, dan yang lainnya untuk klien (juga disebut Certificate Authority (CA)).
    2. Konfigurasi server dan instal sertifikat di browser klien: selanjutnya, agar berhasil melewati otentikasi permintaan SSL, Anda harus menambahkan sertifikat baik di server maupun di mesin klien. Selain itu, sertifikat klien tidak ditujukan untuk komputer, tetapi untuk browser, yaitu, jika pengguna menggunakan Internet Explorer dan Netscape, disarankan untuk mengeluarkan sertifikat untuk kedua browser tersebut. Namun, sertifikat server juga ditujukan untuk jenis yang berbeda server (Di Verisign Anda dapat menemukan sertifikat untuk lebih dari 50 jenis server), tetapi perbedaannya adalah, sebagai aturan, sertifikat tersebut tidak diubah, kecuali versi baru Install.

    CATATAN

    Tapi, meskipun tidak ada pendaftaran resmi, sertifikat percobaan itu sah.

    VPN merupakan perluasan dari jaringan lokal yang berbasis pada penggunaan global, khususnya Internet. Misalnya, pengguna yang bekerja pada mesin jarak jauh dapat terhubung ke jaringan lokal melalui VPN, menggunakan Internet. Dengan teknologi ini, Anda dapat mengirim data antar komputer melalui koneksi yang aman, karena VPN memiliki fitur keamanan yang sama seperti jaringan lokal... Salah satu kelemahan VPN adalah kebutuhan akan koneksi jangka panjang untuk kerja yang efektif... VPN bekerja dengan protokol komunikasi berikut: Microsoft Point-to-Point Tunneling Protocol (PPTP), yang dikirimkan dengan Windows NT 4.0 dan Windows 2000, atau Layer Two Tunneling Protocol (L2TP), yang tersedia di Windows 2000.
    CATATAN

    Daftar sistem operasi yang sesuai hanya berisi itu, dimulai dengan versi yang protokol ini tersedia, yaitu, versi yang lebih baru juga harus disertakan dalam sistem operasi ini, misalnya, Windows XP, Windows 2003 Server.

    Layanan Web dan keamanannya merupakan topik yang sangat menarik dan hangat, mengingat popularitas layanan Web telah meroket dengan munculnya .NET Framework dan VS.NET. Tetapi kami tidak akan membahas lebih jauh, tetapi akan kembali ke arus utama artikel ini. Anda dapat dengan mudah menguasai semua teknologi ini sendiri. Untuk melakukan ini, Anda hanya perlu sedikit keinginan, kesabaran, dan waktu luang. Saya hanya bisa memberi Anda tanda arah yang dapat memandu Anda di jalan yang benar:

    * http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/default.asp
    * http://www.microsoft.com/isaserver
    * http://support.microsoft.com/default.aspx?scid=kb;EN-US;q307267
    * http://www.w3.org/TR/wsdl.html
    * http://www.w3.org/TR/SOAP/

    Otentikasi paspor:

    Paspor adalah sistem pendaftaran seragam yang dibuat oleh Microsoft dan dapat diakses dari situs Web mana pun yang menjadi anggota promosi ini. Salah satu keuntungan penting dari teknologi ini adalah pengguna tidak perlu mengingat data pendaftaran untuk setiap situs secara terpisah, yang sering terjadi ketika akun yang Anda gunakan sudah terisi di situs web tertentu. Paspor memungkinkan Anda untuk menyelesaikan masalah ini karena fakta bahwa ia menggunakan basis data pengguna yang umum, oleh karena itu, di situs yang mendukung paspor .NET, Anda akan selalu memasukkan data pendaftaran yang sama: email dan kata sandi Anda.

    Otentikasi berbasis paspor menggunakan teknologi Web standar industri untuk kemudahan penggunaan dan privasi:

    * protokol SSL aman
    * kue
    *JavaScript 1.2
    * enkripsi dengan metode 3DES

    Untuk mewujudkan kekuatan penuh dari kemampuan paspor, Anda harus mengikuti langkah-langkah berikut:

    1. Unduh .NET passport SDK dari URL berikut: http: //msdn.microsoft.com/library/default.asp? Url = / downloads / list / websrvpass.asp

    2. Setelah itu, Anda harus mendaftarkan situs Anda ke layanan .NET Passport: http://go.microsoft.com/fwlink/?LinkID=9732. Jika Anda tidak mendaftar, maka pilihan Anda akan sangat terbatas, dan Anda tidak akan dapat sepenuhnya mendapatkan hasil yang diharapkan, misalnya, untuk logout (yaitu logout), Anda harus menutup semua jendela browser dan kemudian menghapus semua cookie. .file dengan data paspor

    Seperti jenis otentikasi lainnya, Anda harus terlebih dahulu menyiapkan file konfigurasi proyek. Daftar berikut menunjukkan isi dasar dari bagian otentikasi dari file konfigurasi:

    Dalam kode ini, kami mengatur jenis otentikasi dengan paspor, setelah itu kami menetapkan satu parameter tunggal yang mengatur otentikasi dengan paspor - alamat halaman tempat pengguna akan diarahkan, jika ada kebutuhan untuk mendaftar:

    Fitur umum lainnya yang dimiliki oleh semua jenis otentikasi adalah antarmuka IIdendity, dari mana semua kelas informasi pengguna untuk jenis yang berbeda autentikasi. Otentikasi paspor tidak terkecuali untuk daftar ini, dan objek System.Web.Security.PassportIdentity dari .NET Framework telah menjadi alat yang mengimplementasikan semua properti dasar.

    Untuk menunjukkan tautan ke halaman pendaftaran, biasanya menggunakan logo khusus yang diunggah melalui Internet. Karena logo ini cenderung sering digunakan, sebaiknya buat kontrol terpisah yang mengimplementasikan komponen otentikasi. Untuk melakukannya, ikuti langkah-langkah berikut:

    1. Buat proyek Aplikasi Web ASP.NET baru di VS.NET
    2. Tambahkan Kontrol Pengguna Web khusus ke sana dan beri nama passport.ascx
    3. Ganti kode sumbernya dengan yang berikut ini:

    paspor.ascx.vb:

    Mengimpor Paspor Kelas Umum System.Web.Security Mewarisi System.Web.UI.UserControl #Region "Kode Buatan Perancang Formulir Web" "Panggilan ini diperlukan oleh Perancang Formulir Web. Private Sub InitializeComponent () End Sub "CATATAN: Deklarasi placeholder berikut ini diperlukan oleh Web Form Designer." Jangan hapus atau pindahkan. Private designerPlaceholderDeclaration As System.Object Private Sub Page_Init (ByVal sender As System.Object, ByVal e As System.EventArgs) Menangani MyBase.Init "CODEGEN: Panggilan metode ini diperlukan oleh Web Form Designer" Jangan ubah menggunakan editor kode ... InitializeComponent () End Sub #End Region Private Sub Page_Load (Pengirim ByVal Sebagai System.Object, ByVal e As System.EventArgs) Menangani MyBase.Load Dim id As PassportIdentity "Dapatkan data tentang id pengguna saat ini = CType (context.User.Identity , PassportIdentity) “Menampilkan tombol registrasi Response.Write (id.LogoTag()) End Sub End Class 1. Kemudian ubah nama halaman web project menjadi login.aspx dan masukkan kode struktur halaman berikut: login.aspx:<%@ Page Language="vb" AutoEventWireup="false" Codebehind="login.aspx.vb" Inherits="PassAuth.WebForm1"%> <%@ Register TagName="passport" TagPrefix="ctl" src="passport.ascx"%> Gabung

    Semua otentikasi pengguna dasar dilakukan oleh objek PassportIdentity, atau lebih tepatnya layanan Microsoft Passport, yang terhubung dengan .NET Framework menggunakan objek PassportIdentity. Itulah sebabnya, Anda hanya dapat menuai keuntungan, tetapi untuk mengetahui apa sebenarnya yang dapat dan harus Anda peroleh, lihat tabel 1, yang menjelaskan semua kemungkinan atribut yang menggambarkan pengguna terdaftar.

    Nama atributKeterangan
    AksesibilitasMenentukan apakah opsi aksesibilitas harus diizinkan untuk yang diberikan
    pengguna di semua situs yang menjadi anggota Microsoft Passport
    BDay_presisiMenentukan ketepatan atribut Tanggal Lahir
    Tanggal lahirBerisi tanggal atau tahun lahir pengguna, tergantung nilainya
    atribut BDay_precision
    KotaGeoID menyimpan informasi lokasi
    pengguna
    NegaraKode negara pengguna menurut ISO 3166
    DirektoriBelum digunakan
    Nama depanNama pengguna
    BenderaBerisi opsi profil khusus
    Jenis kelaminMenentukan jenis kelamin pengguna
    Lang_PreferenceLCID bahasa nasional pengguna
    Nama keluargaNama belakang pengguna
    MemberIDTinggiPengenal Pengguna Unik PUID Tingkat Tinggi
    MemberIDlowPengenal Pengguna Unik PUID Tingkat Rendah
    Nama anggotaBerisi nama pengguna dan nama domain, dipisahkan dengan “@”
    Nama panggilanAlamat ramah untuk pengguna
    PekerjaanBerisi beberapa informasi tambahan tentang pengguna, di
    pekerjaan tertentu
    Kode PosKode pos pengguna di Amerika Serikat atau negara lain
    Email PilihanAlamat Surel pengguna
    Versi ProfilVersi profil pengguna
    WilayahGeoID mengidentifikasi tempat tinggal pengguna
    negara
    Zona waktuMenentukan zona waktu di mana pengguna tinggal
    DompetMenentukan apakah pengguna menyimpan paspor mereka di
    dompet

    tab. 1 - Opsi profil pengguna

    Ada dua cara untuk mengakses semua atribut ini: metode GetProfileObject dari objek PassportIdentity, dan melalui properti Item dari objek yang sama. Daftar berikut, yang ditulis dalam C #, menunjukkan kedua metode ini beraksi:
    default.aspx.cs:

    menggunakan System.Web.Security; … Private void Page_Load (pengirim objek, System.EventArgs e) (PassportIdentity id; id = (PassportIdentity) User.Identity; Response.Write (id ["Firstname"] + "
    "); Response.Write (id.GetProfileObject (" Nama belakang ") +"
    "); }

    Sekarang mari kembali ke proyek kontrol passport.ascx dan menyempurnakan halaman pendaftaran. Untuk melakukannya, ubah file login.aspx dan login.aspx.vb sebagai berikut:
    login.aspx:

    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="login.aspx.vb" Inherits="PassAuth.WebForm1"%> <%@ Register TagName="passport" TagPrefix="ctl" src="passport.ascx"%> Gabung

    Silahkan masuk ...

    PUID:
    Nama depan:
    Nama keluarga:
    Surel:

    Terakhir diperbarui: 31.10.2015

    Pelepasan ASP.NET MVC 5 ditandai dengan rilis sistem otorisasi dan otentikasi baru dalam aplikasi .NET yang disebut ASP.NET Identity. Sistem ini menggantikan penyedia Keanggotaan Sederhana yang diperkenalkan di ASP.NET MVC 4.

    Dengan mengklik tombol Ubah Otentikasi, kita dapat mengubah jenis otentikasi dengan memilih salah satu dari yang berikut:

      Tanpa Otentikasi: Identitas ASP.NET dan tidak ada sistem otentikasi bawaan

      Akun Pengguna Perorangan: proyek menyertakan sistem Identitas ASP.NET secara default, yang memungkinkan Anda untuk mengotorisasi kedua pengguna di dalam aplikasi dan menggunakan layanan eksternal seperti google, twitter, dll.

      Akun Organisasi: cocok untuk situs web dan aplikasi web masing-masing perusahaan dan organisasi

      Otentikasi Windows: Sistem otentikasi untuk intranet menggunakan akun Windows

    Biarkan nilai default, yaitu, Akun Pengguna Perorangan dan buat proyek.

    Proyek yang dibuat sudah secara default memiliki semua infrastruktur yang diperlukan untuk otorisasi: model, pengontrol, tampilan. Jika kita melihat pada node Referensi (Perpustakaan), kita akan melihat sejumlah perpustakaan kunci, yang berisi kelas-kelas yang diperlukan untuk otorisasi dan otentikasi:

    Ada sejumlah perpustakaan OWIN yang menambahkan fungsionalitas OWIN ke sebuah proyek, serta tiga perpustakaan Identitas ASP.NET yang sebenarnya:

      Microsoft.AspNet.Identity.EntityFramework: Berisi kelas Entity Framework yang menggunakan ASP.NET Identity dan berkomunikasi dengan SQL Serverom

      Microsoft.AspNet.Identity.Core: Berisi sejumlah antarmuka kunci ASP.NET Identity. Implementasi antarmuka ini akan memungkinkan Anda untuk melampaui MS SQL Server dan menggunakan DBMS lain, termasuk sistem NoSQL, sebagai penyimpanan akun.

      Microsoft.AspNet.Identity.OWIN: Membawa OWIN OWIN ke Aplikasi ASP.NET MVC dengan ASP.NET Identity

    Karena semua infrastruktur sudah ada dalam proyek, kami akan meluncurkan proyek, pada halaman yang ditampilkan di browser, kami akan menemukan tautan Daftar dan klik di atasnya. Pada halaman pendaftaran yang terbuka, masukkan beberapa data:

    Setelah registrasi, login akan ditampilkan di sudut kanan atas halaman web aplikasi web. Setelah mendaftar, kita dapat logout dengan mengklik LogOff, dan login kembali. Jadi, kita sudah bisa mulai menggunakan sistem otentikasi bawaan di aplikasi ASP.NET MVC 5. Sekarang mari kita lihat poin utamanya.

    Pertama, di mana semuanya disimpan? Ke mana perginya data pengguna terdaftar?

    Dalam hal ini, pendekatan Code First digunakan. File web.config sudah memiliki string koneksi default yang menentukan direktori untuk database. Jika kita memperluas folder App_Data, kita dapat melihat database yang dibuat:

    Jika tiba-tiba database tidak terlihat di folder, klik tombol Show All Files di bagian atas jendela Solution Explorer.

    Kita dapat membuka database ini di jendela Server Explorer dan melihat isinya:

    Secara default, saat pengguna pertama masuk, kumpulan tabel berikut dibuat:

      MigrationHistory: Digunakan oleh EntityFramework untuk migrasi DB

      AspNetRoles: berisi definisi peran

      AspNetUserClaims: tabel yang menyimpan sekumpulan klaim. Klaim memperkenalkan model otorisasi yang berbeda dibandingkan dengan peran. Secara kasar, klaim berisi beberapa informasi tentang pengguna, misalnya, alamat email, nama pengguna, usia, dll. Dan informasi ini memungkinkan Anda untuk mengidentifikasi pengguna dan memberinya hak akses yang sesuai.

      AspNetUserLogins: tabel login pengguna

      AspNetUserRoles: tabel yang menetapkan peran khusus untuk pengguna

      AspNetUsers: tabel pengguna sebenarnya. Jika kita membukanya, kita akan melihat data pengguna yang terdaftar

    Objek utama dalam AspNet Identity adalah pengguna dan peran. Semua fungsionalitas untuk membuat, menghapus pengguna, berinteraksi dengan repositori pengguna disimpan di kelas UserManager. Untuk bekerja dengan dan mengelola peran di AspNet Identity, kelas RoleManager didefinisikan. Kelas UserManager dan RoleManager berada di perpustakaan Microsoft.AspNet.Identity.Core.

    Setiap pengguna untuk UserManager mewakili objek antarmuka IUser. Dan semua operasi manajemen pengguna dilakukan melalui penyimpanan yang diwakili oleh objek IUserStore.

    Setiap peran mewakili implementasi antarmuka IRole, dan peran dikelola oleh kelas RoleManager melalui IRoleStore.

    Ruang nama Microsoft.AspNet.Identity.EntityFramework menyediakan implementasi langsung dari antarmuka IUser, IRole, IUserStore, dan IRoleStore:

    Kelas IdentityUser adalah implementasi dari antarmuka IUser. Dan kelas toko pengguna - UserStore mengimplementasikan antarmuka IUserStore.

    Demikian pula, kelas IdentityRole mengimplementasikan antarmuka IRole, dan kelas toko peran RoleStore mengimplementasikan antarmuka IRoleStore.

    Dan untuk berinteraksi dengan database di ruang nama Microsoft.AspNet.Identity.EntityFramework, kelas konteks IdentityDbContext didefinisikan

    Dalam aplikasi ASP.NET MVC, kami tidak akan bekerja secara langsung dengan kelas IdentityUser dan IdentityDbContext. Secara default, file ditambahkan ke proyek di folder Model. IdentityModels.cs yang berisi definisi kelas pengguna dan konteks data:

    ApplicationUser kelas publik: IdentityUser (Tugas asinkron publik GenerateUserIdentityAsync (Manager Pengguna manager) (var userIdentity = menunggu manager.CreateIdentityAsync (ini, DefaultAuthenticationTypes.ApplicationCookie); kembalikan userIdentity;)) kelas publik ApplicationDbContext: IdentityDbContext (ApplicationDbContext publik (): base ("DefaultConnection", throwIfV1Schema: false) () ApplicationDbContext publik statis Buat () (kembalikan ApplicationDbContext baru ();))

    Dalam aplikasi, kami tidak bekerja secara langsung dengan kelas IdentityUser dan IdentityDbContext, tetapi kami berurusan dengan kelas yang diwarisi.

    Kelas ApplicationUser mewarisi semua properti dari IdentityUser. Itu juga menambahkan metode GenerateUserIdentityAsync (), yang membuat objek ClaimsIdentity dengan memanggil UserManager.CreateIdentityAsync. Objek ini berisi informasi tentang pengguna ini.

    Arsitektur ini memungkinkan Anda untuk mengambil fungsionalitas yang sudah jadi dan, jika perlu, menambahkan yang baru, misalnya, menambahkan properti baru untuk pengguna atau menambahkan tabel baru ke database.

    Saya tidak akan menjelaskan secara rinci semua fungsi AspNet Identity, yang ditambahkan ke proyek secara default, saya hanya akan menguraikan secara singkat fitur-fitur utama.

    Pertama, untuk menggunakan AspNet Identity, dua file ditambahkan ke proyek di folder App_Start. Mengajukan Startup.Auth.cs berisi kelas startup untuk aplikasi OWIN. Karena AspNet Identity menggunakan infrastruktur OWIN, kelas ini adalah salah satu kunci dan diperlukan untuk bekerja.

    Mengajukan IdentityConfig.cs berisi sejumlah kelas pembantu tambahan: layanan untuk validasi dua faktor menggunakan email dan telepon EmailService dan SmsService, kelas manajer pengguna ApplicationUserManager, yang menambahkan sejumlah fungsi tambahan, dan kelas ApplicationSignInManager yang digunakan untuk masuk dan keluar dari situs.

    Fungsionalitas dasar sistem otentikasi dan manajemen akun terletak di dua pengontrol: AccountController dan ManageController

    AccountController mendefinisikan metode untuk login, pendaftaran, verifikasi kode yang dikirim melalui email atau SMS, reset kata sandi, pengingat kata sandi, login ke situs menggunakan layanan eksternal. ManageController digunakan untuk manajemen akun dan menawarkan kemampuan untuk mengubah kata sandi dan mengelola nomor telepon dalam sistem. Untuk kedua pengontrol, semua tampilan yang diperlukan dan model tampilan khusus dihasilkan secara default.

    Terlepas dari kenyataan bahwa secara default kami sudah dilengkapi dengan fungsionalitas yang sudah jadi, namun, dalam beberapa kasus, misalnya, untuk mengirim SMS atau email, diperlukan konfigurasi tambahan. Sekarang mari kita lihat poin utama dari sistem AspNet Identity.