身份验证
本指南提供了支持的身份验证类型列表,并描述了如何处理各种身份验证请求。
Proxy、Basic、Digest 和 NTLM 身份验证
要处理 Proxy、Basic、Digest 或 NTLM 身份验证,请使用 AuthenticateHandler
。您可以以编程方式提供所需的用户名和密码,显示用户名/密码提示,或者只是取消身份验证请求。
要检查身份验证请求是否由代理服务器发出,请使用 AuthenticateParameters.IsProxy
属性。请参阅以下代码示例:
network.AuthenticateHandler = new Handler<AuthenticateParameters, AuthenticateResponse>(p =>
{
if (p.IsProxy)
{
// 此身份验证请求由代理服务器发出。
}
// ...
};
network.AuthenticateHandler =
New Handler(Of AuthenticateParameters, AuthenticateResponse)(Function(p)
If p.IsProxy Then
' 此身份验证请求由代理服务器发出。
End If
' ...
End Function)
以下代码示例演示了如何提供所需的凭证:
network.AuthenticateHandler = new Handler<AuthenticateParameters, AuthenticateResponse>(p =>
AuthenticateResponse.Continue("<username>", "<password>"));
network.AuthenticateHandler =
New Handler(Of AuthenticateParameters, AuthenticateResponse)(Function(p)
Return AuthenticateResponse.Continue("<username>", "<password>")
End Function)
要取消身份验证请求,请使用以下方法:
network.AuthenticateHandler = new Handler<AuthenticateParameters, AuthenticateResponse>(p =>
AuthenticateResponse.Cancel());
network.AuthenticateHandler =
New Handler(Of AuthenticateParameters, AuthenticateResponse)(Function(p)
Return AuthenticateResponse.Cancel()
End Function)
HTTPS 客户端证书
在 SSL 或 TLS 会话开始时,网络服务器可能会要求客户端应用程序提交客户端证书以进行身份验证。收到证书后,服务器使用它来识别证书的来源,并确定是否应为客户端提供访问权限。
如果 Web 服务器启用了客户端证书身份验证,则只有尝试从具有有效客户端证书的客户端连接的用户才能成功。
默认情况下,DotNetBrowser 会取消所有证书。要执行身份验证并选择所需的客户端证书,请使用 SelectCertificateHandler
。您可以指示 Web 服务器使用哪个证书:
// 选择可用列表中的最后一个客户端证书。
browser.SelectCertificateHandler =
new Handler<SelectCertificateParameters, SelectCertificateResponse>(p =>
{
return SelectCertificateResponse.Select(p.Certificates.Count() - 1);
});
' 选择可用列表中的最后一个客户端证书。
browser.SelectCertificateHandler =
New Handler(Of SelectCertificateParameters, SelectCertificateResponse)(Function(p)
Return SelectCertificateResponse.Select(p.Certificates.Count() - 1)
End Function)
也可以显示一个对话框来选择所需的可用客户端证书。
要取消客户端证书身份验证,请使用以下方法:
browser.SelectCertificateHandler =
new Handler<SelectCertificateParameters, SelectCertificateResponse>(p =>
{
return SelectCertificateResponse.Cancel();
});
browser.SelectCertificateHandler =
New Handler(Of SelectCertificateParameters, SelectCertificateResponse)(Function(p)
Return SelectCertificateResponse.Cancel()
End Function)
自定义客户端证书
DotNetBrowser 允许选择未安装的自定义客户端证书,因此它不会出现在给定的客户端证书列表中。以下示例演示了如何选择自定义客户端证书:
string clientCertFile = "<cert-file>.pfx";
string clientCertPassword = "<cert-password>";
// ...
X509Certificate2 certificate = new X509Certificate2(Path.GetFullPath(clientCertFile),
clientCertPassword,
X509KeyStorageFlags.Exportable);
Certificate cert = new Certificate(certificate);
browser.SelectCertificateHandler
= new Handler<SelectCertificateParameters, SelectCertificateResponse>(p =>
{
return SelectCertificateResponse.Select(cert);
});
Dim clientCertFile As String = "<cert-file>.pfx"
Dim clientCertPassword As String = "<cert-password>"
' ...
Dim certificate As New X509Certificate2(Path.GetFullPath(clientCertFile),
clientCertPassword,
X509KeyStorageFlags.Exportable)
Dim cert As New Certificate(certificate)
browser.SelectCertificateHandler =
New Handler(Of SelectCertificateParameters, SelectCertificateResponse)(Function(p)
Return SelectCertificateResponse.Select(cert)
End Function)
在上面的代码示例中,使用 PKCS12 密钥库和 <cert-password>
从 <cert-file>
加载自定义客户端证书,并创建带有此客户端证书的 Certificate
。