ang*_*yip 4 java authentication josso smartcard cac
我对试图确定 CAC/Active Directory(AD) 身份验证在基于 Java 的 Web 应用程序中发挥作用的位置感到相当困惑。以多个 Weblogic 容器上托管的多个 J2E JSF 应用程序为例。这些应用程序中的每一个都通过检查用户所处的 AD 角色来限制用户的访问。如果所有这些应用程序都需要 CAC/AD 身份验证,那么在什么阶段执行 CAC/AD 身份验证?
据我了解,理想情况下,您需要一个与执行身份验证的应用程序分开的网关。一个简单的例子是 F5 硬件/软件捆绑包。一旦用户使用其 CAC/pin 组合进行身份验证,它们就会被转发到 Weblogic 上部署的应用程序,并在其标头中包含一些附加信息(如前面提到的 AD 角色)。我并不是说我应该购买它,因为没有可编程解决方案,而是作为一个例子,身份验证和使用的资源是两个独立的实体,并且不必针对此问题将其组合起来。
然而,在实践中,我了解到许多项目正在结合 Microsoft 和 Apache 服务来允许身份验证。这是一篇很好的博客文章,概述了一些好处。一旦用户通过 IIS 身份验证,他们就会被转发到 apache 上的应用程序。无论如何,混合使用 IIS 和 Weblogic 似乎是一个坏主意,尤其是在尝试配置两个节点之间的通信时。
堆栈和网络上也有许多可以追溯到 2012 年之前的帖子,其中推荐了不同的解决方案。一篇文章建议如下:
当服务器验证客户端证书时,您可以指定一组可接受的证书策略
虽然答案总体上是有道理的,但作者从未深入探讨进行这种交流的架构细节。其他一些帖子推荐JOSSO来执行 SSO 功能,如前面提到的网关机制。这篇文章还讨论了使用PKCS11通过使用制造商提供的驱动程序直接读取智能卡。还有一些问题没有答案,例如Authenticating AD server user using DOD Issued CAC in java。
考虑到其中一些帖子的平均间隔时间为 5 年,我不确定今天解决此问题的最佳实践是什么。网关方法是进行身份验证的理想方法吗?我的想法根本不适用并且存在更好的解决方案吗?
我花了一些时间来提取问题,所以 - 你想实现什么目标?但是-让我们尝试一下:
正如您提到的 CAC/AD - 我假设每个客户端都需要自己的密钥对和签名证书。您希望使用智能卡(可以托管密钥对和证书)实现 SSO(单点登录)。
Java Web 应用程序的智能卡身份验证在哪里进行?
智能卡通常用作密钥库(可通过 PKCS11 密钥库访问)。它可能包含多个密钥对和证书。如何使用 - Web 浏览器(大多数)可以使用智能卡证书与服务器建立双向(2 路)SSL。
常见的做法是终止 Web 服务器/代理上的 SSL,并将证书信息 (DN) 作为 HTTP 标头(例如 x-client-cert)传递到后端服务。F5 BIGIP 是一个非常好的工具,我们通常使用 Apache 或 Nginx 作为更简单、更便宜的选择来实现此目的。
笔记:
一个完全不同的问题是如何将 HTTP 标头转换为用户主体(身份)及其权限/角色。您可以为此目的编写一个 servlet 过滤器,但对于较大的部署,您可以使用身份服务器(F5 APM、WSO2 IS、OpenAM)有效地将客户端证书信息转换为其他协议(SAML、OAuth 等)提供的用户身份。 )
如果所有这些应用程序都需要 CAC/AD 身份验证,那么在哪个阶段执行 CAC/AD 身份验证?
从技术上讲 - 建立 SSL 连接时。因此,无论您向代理还是身份服务器提供客户端证书信息 - 都不重要,这里重要的部分是将此信息提供给所有其他应用程序(作为代理后面的 HTTP 标头或使用 SAML、OAuth 的声明) ,...其他认证)。
网关方法是进行身份验证的理想方法吗?我的想法根本不适用并且存在更好的解决方案吗?
网关方法非常常见且可靠。不要忘记在传递任何信息之前清理 HTTP 标头。
另一种选择是使用身份服务器,它为您提供与外部(云)服务集成的优势。然而 - 它是一个独立的服务器,有所有的麻烦(部署、维护、知识……)
另一种选择 - 您可能需要智能卡登录 AD 客户端工作站,然后使用普通 SPNEGO (Kerberos) SSO :)
我希望它有帮助,及时行乐
| 归档时间: | 
 | 
| 查看次数: | 3342 次 | 
| 最近记录: |