List icon 目录

身份验证

本指南提供了支持的身份验证类型列表,并描述了如何处理各种身份验证请求。

Proxy、Basic、Digest、NTLM

要处理 Proxy、Basic、Digest 或 NTLM 身份验证,请使用 AuthenticateCallback。在此回调中,您可以提供所需的用户名和密码,显示一个对话框,您可以在其中要求用户提供所需凭证,或者仅取消身份验证请求。

要检查身份验证请求是否由代理服务器发出,请使用 AuthenticateCallback.Params.isProxy() 方法。例如:

Java
Kotlin
network.set(AuthenticateCallback.class, (params, tell) -> {
    if (params.isProxy()) {
        // 该身份验证请求由代理服务器发出。
    }
});
network.set(AuthenticateCallback::class.java, AuthenticateCallback { params, action ->
    if (params.isProxy) {
        // 该身份验证请求由代理服务器发出。
    }
})

以下示例演示了如何提供所需凭证:

Java
Kotlin
network.set(AuthenticateCallback.class, (params, tell) ->
        tell.authenticate("<username>", "<password>"));
network.set(AuthenticateCallback::class.java,
    AuthenticateCallback { params, tell -> tell.authenticate("<username>", "<password>") }
)

要取消身份验证请求,请使用以下方法:

Java
Kotlin
network.set(AuthenticateCallback.class, (params, tell) -> tell.cancel());
network.set(AuthenticateCallback::class.java,
    AuthenticateCallback { params, tell -> tell.cancel() }
)

HTTPS 客户端证书

在 SSL 或 TLS 会话开始时,Web 服务器可能要求客户端应用程序提交客户端证书以进行身份验证。服务器收到证书后,会使用它来识别证书的来源,并决定是否应为客户端提供访问权限。

如果 Web 服务器启用了客户端证书身份验证,则只有尝试从安装了正确客户端证书的客户端连接的用户才能成功连接。如果客户端安装了多个客户端证书,则 JxBrowser 将调用 SelectClientCertificateCallback 回调。在此回调中,您可以告诉 Web 服务器应该使用哪个客户端证书:

Java
Kotlin
browser.set(SelectClientCertificateCallback.class, (params, tell) -> {
    // 已安装和可用的客户端证书列表。
    List<Certificate> certificates = params.certificates();
    // 从可用的客户端证书列表中选择最后一个客户端证书。
    tell.select(certificates.size() - 1);
});
browser.set(SelectClientCertificateCallback::class.java,
    SelectClientCertificateCallback { params, tell ->
        // 已安装和可用的客户端证书列表。
        val certificates = params.certificates()
        // 从可用的客户端证书列表中选择最后一个客户端证书。
        tell.select(certificates.size - 1)
    }
)

在此回调中,您可以显示一个对话框,您可以在其中要求用户从已安装和可用的证书列表中选择所需的客户端证书。

要取消客户端证书身份验证,请使用以下方法:

Java
Kotlin
browser.set(SelectClientCertificateCallback.class, (params, tell) ->
        tell.cancel());
browser.set(SelectClientCertificateCallback::class.java,
    SelectClientCertificateCallback { params, tell -> tell.cancel() }
)

自定义客户端证书

JxBrowser 允许选择未安装的自定义客户端证书,因此该证书不在给定的客户端证书列表中。以下示例演示了如何选择自定义客户端证书:

Java
Kotlin
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 可以在不提示用户输入用户名和密码的情况下,对用户进行身份验证,以访问 Web 服务器或代理。它使用用户最初登录机器时建立的缓存凭证。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 都会显示带有可用身份验证机制的身份验证对话框:

WebAuthn Dialog

在 macOS 上,当像 JxBrowser 一样将 Chromium 作为控制台应用程序运行时,只提供一种身份验证机制,即使用带有安全密钥的 USB。