使用 Vaadin 应用程序的通用访问卡 (CAC) 身份验证

Common Access Card (CAC) Authentication using Vaadin Application

我正在创建一个要求用户通过登录名和密码进行身份验证的 Vaadin Web 应用程序,我想知道是否可以添加 CAC 身份验证作为另一种身份验证方式。

总而言之,我的目标是如果用户已经通过其 CAC 身份验证则允许访问该网站,或者如果用户未通过 CAC 身份验证则需要标准登录 (name/password)

通过搜索和谷歌搜索,我找到了 Java PKCS#11,但它看起来像是一个用于桌面集成的库。

我也看到了this and this个帖子,看起来和我的情况差不多,其实不是。第一个讲的是通过配置一个Web服务器来对整个Web应用程序进行认证的要求。第二个介绍 Java PKCS#11 作为桌面解决方案。

同样,我希望有一个"parallel"登录,如果浏览器向服务器发送CAC证书,服务器不应该要求标准登录,否则是的。可能吗?另外,如果 CAC 证书被发送到服务器,是否有办法检索有关此 CAC 的数据,例如所有者的姓名?

在正确配置的 servlet 容器中,您可以使用它来读取客户端证书(如果存在)

String cipherSuite = (String) req.getAttribute("javax.servlet.request.cipher_suite");

if (cipherSuite != null) {
    X509Certificate certChain[] = (X509Certificate[]) req.getAttribute("javax.servlet.request.X509Certificate");
    if (certChain != null) {
        for (int i = 0; i < certChain.length; i++) {
            System.out.println ("Client Certificate [" + i + "] = "
                    + certChain[i].toString());
        }
    }
}