身份验证
本指南提供了支持的身份验证类型列表,并描述了如何处理各种身份验证请求。
Proxy, Basic, Digest, NTLM
要处理代理、基本、摘要或 NTLM 身份验证,请使用 AuthenticateCallback
。 在此回调中,您可以提供所需的用户名和密码,显示一个对话框,您可以在其中要求用户提供所需凭证,或者只是取消身份验证请求。
要检查身份验证请求是否由代理服务器发出,请使用AuthenticateCallback.Params.isProxy()
方法。 例如:
network.set(AuthenticateCallback.class, (params, tell) -> {
if (params.isProxy()) {
// This authentication request is issued by a proxy server.
}
});
network.set(AuthenticateCallback::class.java, AuthenticateCallback { params, action ->
if (params.isProxy) {
// This authentication request is issued by a proxy server.
}
})
以下示例演示了如何提供所需凭证:
network.set(AuthenticateCallback.class, (params, tell) ->
tell.authenticate("<username>", "<password>"));
network.set(AuthenticateCallback::class.java,
AuthenticateCallback { params, tell -> tell.authenticate("<username>", "<password>") }
)
要取消身份验证请求,请使用以下方法:
network.set(AuthenticateCallback.class, (params, tell) -> tell.cancel());
network.set(AuthenticateCallback::class.java,
AuthenticateCallback { params, tell -> tell.cancel() }
)
HTTPS 客户端证书
在 SSL 或 TLS 会话开始时,网络服务器可能要求客户端应用程序提交客户端证书以进行身份验证。 收到证书后,服务器将使用它来识别证书的来源并确定是否应为客户端提供访问权限。
如果网络服务器启用了客户端证书身份验证,则只有尝试从加载了正确客户端证书的客户端进行连接的用户才会成功。 如果客户端安装了多个客户端证书,则 JxBrowser 将调用 SelectClientCertificateCallback
回调。 在此回调中,您可以告诉网络服务器应该使用哪个客户端证书:
browser.set(SelectClientCertificateCallback.class, (params, tell) -> {
// The list of the installed and available client certificates.
List<Certificate> certificates = params.certificates();
// Select the last client certificate in the list of available
// client certificates.
tell.select(certificates.size() - 1);
});
browser.set(SelectClientCertificateCallback::class.java,
SelectClientCertificateCallback { params, tell ->
// The list of the installed and available client certificates.
val certificates = params.certificates()
// Select the last client certificate in the list of available
// client certificates.
tell.select(certificates.size - 1)
}
)
在此回调中,您可以显示一个对话框,您可以在其中要求用户从已安装和可用的证书列表中选择所需的客户端证书。
要取消客户端证书身份验证,请使用以下方法:
browser.set(SelectClientCertificateCallback.class, (params, tell) ->
tell.cancel());
browser.set(SelectClientCertificateCallback::class.java,
SelectClientCertificateCallback { params, tell -> tell.cancel() }
)
自定义客户端证书
JxBrowser 允许选择未安装的自定义客户端证书,因此在给定的客户端证书列表中不可用。 以下示例演示如何选择自定义客户端证书:
Path certFile = Paths.get("<cert-file>.p12");
String certPassword = "<cert-password>";
browser.set(SelectClientCertificateCallback.class, (params, tell) ->
tell.select(ClientCertificate.of(certFile,
certPassword, KeyStoreType.PKCS12)));
val certFile = Paths.get("<cert-file>.p12")
val certPassword = "<cert-password>"
browser.set(SelectClientCertificateCallback::class.java,
SelectClientCertificateCallback { params, tell ->
tell.select(
ClientCertificate.of(certFile,
certPassword, KeyStoreType.PKCS12))
}
)
在此示例中,我们使用 PKCS12 密钥库从 <cert-file>
加载自定义客户端证书,使用 <cert-password>
提取其私钥,并使用最终实体证书、所有中间证书和私钥创建 ClientCertificate
。
集成 Windows 身份验证和 Kerberos
服务器白名单功能允许您对列出的域使用集成 Windows 身份验证 (IWA) 和 Kerberos。
借助 IWA,Chromium 可以在不提示用户输入用户名和密码的情况下向网络服务器或代理验证用户身份。 它使用用户最初登录机器时建立的缓存凭证。 IWA 仅支持协商和 NTLM 质询。
HTTP 服务器授权白名单指定哪些服务器应列入 IWA 白名单。 默认情况下,仅当存在来自此允许列表中的代理或服务器的身份验证质询时,才会启用 IWA。 如果未设置此列表,Chromium 会尝试检测服务器是否位于内网中,并仅响应内网服务器的 IWA 请求。 如果服务器被检测为内网,则忽略来自该服务器的 IWA 请求。
HTTP 网络委托白名单指定了 Chromium 可以委托给的服务器。 如果未设置此列表,即使服务器被检测为内网,Chromium 也不会委托用户凭证。
自 Chromium 81 (7.12) 起,无痕模式的集成身份验证被禁用。 在这种情况下,将调用 AuthenticateCallback
以提供用户名和密码。
SuisseID, U2F
JxBrowser 支持通过 SuisseID 和 U2F 设备进行身份验证。 您无需执行任何操作即可启用它们。 当您加载需要此类身份验证的网页时,这些设备将被自动识别。
WebAuthn API
JxBrowser 7.27 及更高版本支持使用 WebAuthn API。 当网站请求创建新凭证时,无论是为了注册新帐户还是将新的非对称密钥对凭证与现有帐户相关联,JxBrowser 都会显示带有可用身份验证机制的身份验证对话框:
在 macOS 上,当像 JxBrowser 一样将 Chromium 作为控制台应用程序运行时,只提供一种身份验证机制,即使用带有安全密钥的 USB。