Sdílet prostřednictvím


HttpListener.AuthenticationSchemeSelectorDelegate Vlastnost

Definice

Získá nebo nastaví delegát volaný k určení protokolu použitého k ověření klientů.

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

Hodnota vlastnosti

Delegát AuthenticationSchemeSelector , který vyvolá metodu použitou k výběru ověřovacího protokolu. Výchozí hodnota je null.

Výjimky

Tento objekt byl uzavřen.

Příklady

Následující příklad kódu nastaví hodnotu této vlastnosti.

// 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()

Následující příklad kódu poskytuje implementaci metody vyvolané delegátem AuthenticationSchemeSelector .

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

Poznámky

Poznámka

Pokud chcete použít stejný ověřovací protokol pro všechny požadavky zpracovávané konkrétní instancí nástroje HttpListener, nemusíte tuto vlastnost nastavovat. Pokud chcete zadat protokol, který se má použít pro všechny požadavky klientů, použijte AuthenticationSchemes vlastnost .

Pokud klient nezadá ověřovací informace ve svých hlavičkách, HttpListener zavolá zadaného delegáta pro každý neověřený příchozí požadavek, aby určil, který protokol se má použít k ověření klienta. Metody GetContext a EndGetContext vrátí příchozí požadavek pouze v případě, že HttpListener požadavek úspěšně ověřil. Pokud požadavek nelze ověřit, HttpListener automaticky odešle zpět odpověď 401. Identitu úspěšně ověřeného klienta můžete získat pomocí HttpRequest.LogonUserIdentity vlastnosti .

Možnost delegovat výběr ověřovacího protokolu na metodu specifickou pro aplikaci je užitečná, pokud chcete, aby instance HttpListener používala různé ověřovací protokoly v závislosti na vlastnostech požadavků, které přijímá (například požadavek Url nebo UserHostAddress vlastnost).

Poznámka

Chcete-li nastavit tuto vlastnost pro povolení funkce Digest, protokol NTLM nebo Negotiate vyžaduje , SecurityPermission. ControlPrincipal

Platí pro