Bagikan melalui


HttpListener.AuthenticationSchemeSelectorDelegate Properti

Definisi

Mendapatkan atau mengatur delegasi yang dipanggil untuk menentukan protokol yang digunakan untuk mengautentikasi klien.

public:
 property System::Net::AuthenticationSchemeSelector ^ AuthenticationSchemeSelectorDelegate { System::Net::AuthenticationSchemeSelector ^ get(); void set(System::Net::AuthenticationSchemeSelector ^ value); };
public System.Net.AuthenticationSchemeSelector? AuthenticationSchemeSelectorDelegate { get; set; }
public System.Net.AuthenticationSchemeSelector AuthenticationSchemeSelectorDelegate { get; set; }
member this.AuthenticationSchemeSelectorDelegate : System.Net.AuthenticationSchemeSelector with get, set
Public Property AuthenticationSchemeSelectorDelegate As AuthenticationSchemeSelector

Nilai Properti

Delegasi AuthenticationSchemeSelector yang memanggil metode yang digunakan untuk memilih protokol autentikasi. Nilai defaultnya adalah null.

Pengecualian

Objek ini telah ditutup.

Contoh

Contoh kode berikut menetapkan nilai properti ini.

// Set up a listener.
HttpListener listener = new HttpListener();
HttpListenerPrefixCollection prefixes = listener.Prefixes;
prefixes.Add(@"http://localhost:8080/");
prefixes.Add(@"http://contoso.com:8080/");

// Specify the authentication delegate.
listener.AuthenticationSchemeSelectorDelegate =
    new AuthenticationSchemeSelector (AuthenticationSchemeForClient);

// Start listening for requests and process them
// synchronously.
listener.Start();
' Set up a listener.
Dim listener As New HttpListener()
Dim prefixes As HttpListenerPrefixCollection = listener.Prefixes
prefixes.Add("http://localhost:8080/")
prefixes.Add("http://contoso.com:8080/")

' Specify the authentication delegate.
listener.AuthenticationSchemeSelectorDelegate = New AuthenticationSchemeSelector(AddressOf AuthenticationSchemeForClient)

' Start listening for requests and process them 
' synchronously.
listener.Start()

Contoh kode berikut menyediakan implementasi metode yang dipanggil oleh AuthenticationSchemeSelector delegasi.

static AuthenticationSchemes AuthenticationSchemeForClient(HttpListenerRequest request)
{
    Console.WriteLine("Client authentication protocol selection in progress...");
    // Do not authenticate local machine requests.
    if (request.RemoteEndPoint.Address.Equals (IPAddress.Loopback))
    {
        return AuthenticationSchemes.None;
    }
    else
    {
        return AuthenticationSchemes.IntegratedWindowsAuthentication;
    }
}
Private Shared Function AuthenticationSchemeForClient(ByVal request As HttpListenerRequest) As AuthenticationSchemes
    Console.WriteLine("Client authentication protocol selection in progress...")
    ' Do not authenticate local machine requests.
    If request.RemoteEndPoint.Address.Equals(IPAddress.Loopback) Then
        Return AuthenticationSchemes.None
    Else
        Return AuthenticationSchemes.IntegratedWindowsAuthentication
    End If
End Function

Keterangan

Catatan

Jika Anda ingin protokol autentikasi yang sama digunakan untuk semua permintaan yang ditangani oleh instans tertentu dari HttpListener, Anda tidak perlu mengatur properti ini. Untuk menentukan protokol yang akan digunakan untuk semua permintaan klien, gunakan AuthenticationSchemes properti .

Jika klien belum menentukan informasi autentikasi di header-nya, HttpListener klien memanggil delegasi yang ditentukan untuk setiap permintaan masuk yang tidak diautentikasi untuk menentukan protokol mana, jika ada, yang akan digunakan untuk mengautentikasi klien. Metode GetContext dan EndGetContext mengembalikan permintaan masuk hanya jika HttpListener berhasil mengautentikasi permintaan. Jika permintaan tidak dapat diautentikasi, HttpListener secara otomatis mengirim kembali respons 401. Anda bisa mendapatkan identitas klien yang berhasil diautentikasi menggunakan HttpRequest.LogonUserIdentity properti .

Kemampuan untuk mendelegasikan pilihan protokol autentikasi ke metode khusus aplikasi berguna jika Anda ingin instans HttpListener menggunakan protokol autentikasi yang berbeda tergantung pada karakteristik permintaan yang diterimanya (misalnya, permintaan Url atau UserHostAddress properti).

Catatan

Untuk mengatur properti ini untuk mengaktifkan Digest, NTLM, atau Negosiasi memerlukan SecurityPermission, ControlPrincipal.

Berlaku untuk