IAuthenticationModule.Authenticate(String, WebRequest, ICredentials) 方法  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回 Authorization 类的实例来响应来自服务器的身份验证要求。
public:
 System::Net::Authorization ^ Authenticate(System::String ^ challenge, System::Net::WebRequest ^ request, System::Net::ICredentials ^ credentials);public System.Net.Authorization? Authenticate(string challenge, System.Net.WebRequest request, System.Net.ICredentials credentials);public System.Net.Authorization Authenticate(string challenge, System.Net.WebRequest request, System.Net.ICredentials credentials);abstract member Authenticate : string * System.Net.WebRequest * System.Net.ICredentials -> System.Net.AuthorizationPublic Function Authenticate (challenge As String, request As WebRequest, credentials As ICredentials) As Authorization参数
- challenge
- String
服务器发送的身份验证质询。
- request
- WebRequest
与质询关联的 WebRequest 实例。
- credentials
- ICredentials
与质询关联的凭据。
返回
一个 Authorization 实例,包含有关请求的授权消息;如果无法处理质询,则包含 null。
示例
下面的示例显示如何使用 Authenticate 方法。 有关完整示例, AuthenticationManager 请参阅 类。
// Authenticate is the core method for this custom authentication.
// When an Internet resource requests authentication, the WebRequest.GetResponse
// method calls the AuthenticationManager.Authenticate method. This method, in
// turn, calls the Authenticate method on each of the registered authentication
// modules, in the order in which they were registered. When the authentication is
// complete an Authorization object is returned to the WebRequest.
public Authorization Authenticate(String challenge, WebRequest request, ICredentials credentials)
{
  Encoding ASCII = Encoding.ASCII;
  // Get the username and password from the credentials
  NetworkCredential myCreds = credentials.GetCredential(request.RequestUri, "Basic");
  if (PreAuthenticate(request, credentials) == null)
    Console.WriteLine("\n Pre-authentication is not allowed.");
  else
    Console.WriteLine("\n Pre-authentication is allowed.");
  // Verify that the challenge satisfies the authorization requirements.
  bool challengeOk = CheckChallenge(challenge, myCreds.Domain);
  if (!challengeOk)
    return null;
  // Create the encrypted string according to the Basic authentication format as
  // follows:
  // a)Concatenate the username and password separated by colon;
  // b)Apply ASCII encoding to obtain a stream of bytes;
  // c)Apply Base64 encoding to this array of bytes to obtain the encoded
  // authorization.
  string basicEncrypt = myCreds.UserName + ":" + myCreds.Password;
  string basicToken = "Basic " + Convert.ToBase64String(ASCII.GetBytes(basicEncrypt));
  // Create an Authorization object using the encoded authorization above.
  Authorization resourceAuthorization = new Authorization(basicToken);
  // Get the Message property, which contains the authorization string that the
  // client returns to the server when accessing protected resources.
  Console.WriteLine("\n Authorization Message:{0}",resourceAuthorization.Message);
  // Get the Complete property, which is set to true when the authentication process
  // between the client and the server is finished.
  Console.WriteLine("\n Authorization Complete:{0}",resourceAuthorization.Complete);
  Console.WriteLine("\n Authorization ConnectionGroupId:{0}",resourceAuthorization.ConnectionGroupId);
  return resourceAuthorization;
}
  ' Authenticate is the core method for this custom authentication.
  ' When an Internet resource requests authentication, the WebRequest.GetResponse 
  ' method calls the AuthenticationManager.Authenticate method. This method, in 
  ' turn, calls the Authenticate method on each of the registered authentication
  ' modules, in the order in which they were registered. When the authentication is 
  ' complete an Authorization object is returned to the WebRequest.
  Public Function Authenticate(ByVal challenge As String, ByVal request As WebRequest, ByVal credentials As ICredentials) As Authorization _
      Implements IAuthenticationModule.Authenticate
    Dim ASCII As Encoding = Encoding.ASCII
    ' Get the username and password from the credentials
    Dim MyCreds As NetworkCredential = credentials.GetCredential(request.RequestUri, "Basic")
    If PreAuthenticate(request, credentials) Is Nothing Then
      Console.WriteLine(ControlChars.Lf + " Pre-authentication is not allowed.")
    Else
      Console.WriteLine(ControlChars.Lf + " Pre-authentication is allowed.")
    End If
    ' Verify that the challenge satisfies the authorization requirements.
    Dim challengeOk As Boolean = checkChallenge(challenge, MyCreds.Domain)
    If Not challengeOk Then
      Return Nothing
    End If
    ' Create the encrypted string according to the Basic authentication format as
    ' follows:
    ' a)Concatenate the username and password separated by colon;
    ' b)Apply ASCII encoding to obtain a stream of bytes;
    ' c)Apply Base64 encoding to this array of bytes to obtain the encoded 
    ' authorization.
    Dim BasicEncrypt As String = MyCreds.UserName + ":" + MyCreds.Password
    Dim BasicToken As String = "Basic " + Convert.ToBase64String(ASCII.GetBytes(BasicEncrypt))
    ' Create an Authorization object using the encoded authorization above.
    Dim resourceAuthorization As New Authorization(BasicToken)
    ' Get the Message property, which contains the authorization string that the 
    ' client returns to the server when accessing protected resources.
    Console.WriteLine(ControlChars.Lf + " Authorization Message:{0}", resourceAuthorization.Message)
    ' Get the Complete property, which is set to true when the authentication process 
    ' between the client and the server is finished.
    Console.WriteLine(ControlChars.Lf + " Authorization Complete:{0}", resourceAuthorization.Complete)
    Console.WriteLine(ControlChars.Lf + " Authorization ConnectionGroupId:{0}", resourceAuthorization.ConnectionGroupId)
    Return resourceAuthorization
  End Function 'Authenticate
End Class
注解
方法 Authenticate 对服务器执行身份验证过程,并将实例 Authorization 返回到 AuthenticationManager。
实施者说明
对 AuthenticationManager 已注册的身份验证模块调用 Authenticate(String, WebRequest, ICredentials) 方法,以确定哪个模块处理质询。 如果身份验证模块无法处理质询,该方法 Authenticate(String, WebRequest, ICredentials) 必须返回 null。 如果身份验证模块在执行身份验证过程时遇到错误, Authenticate(String, WebRequest, ICredentials) 必须引发异常。