HttpListener.AuthenticationSchemeSelectorDelegate Property
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets or sets the delegate called to determine the protocol used to authenticate clients.
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
Property Value
An AuthenticationSchemeSelector delegate that invokes the method used to select an authentication protocol. The default value is null
.
Exceptions
This object has been closed.
Examples
The following code example sets the value of this property.
// 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()
The following code example provides an implementation of a method invoked by an AuthenticationSchemeSelector delegate.
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
Remarks
Note
If you want the same authentication protocol to be used for all requests handled by a particular instance of HttpListener, you do not need to set this property. To specify a protocol to be used for all client requests, use the AuthenticationSchemes property.
If the client has not specified authentication information in its headers, the HttpListener calls the specified delegate for each unauthenticated incoming request to determine which, if any, protocol to use to authenticate the client. The GetContext and EndGetContext methods return an incoming request only if the HttpListener successfully authenticated the request. If a request cannot be authenticated, the HttpListener automatically sends back a 401 response. You can get the identity of a successfully authenticated client using the HttpRequest.LogonUserIdentity property.
The ability to delegate the choice of authentication protocol to an application-specific method is useful if you want an instance of HttpListener to use different authentication protocols depending on the characteristics of the requests it receives (for example, the request's Url or UserHostAddress property).
Note
To set this property to enable Digest, NTLM, or Negotiate requires the SecurityPermission, ControlPrincipal.