我很想尝试确定CAC / Active Directory(AD)身份验证在基于Java的Web应用程序中所起的作用而感到困惑。以托管在多个Weblogic容器上的多个J2E JSF应用程序为例。这些应用程序中的每一个都通过检查用户所处的AD角色来限制用户的访问权限。如果所有这些应用程序都需要CAC / AD身份验证,则在哪个阶段执行?
据我了解,理想情况下,您希望网关与进行身份验证的应用程序分开。一个简单的示例是F5硬件/软件包。用户使用其CAC / pin组合进行身份验证后,会将其转发到Weblogic上已部署的应用程序,并在其标头中添加一些其他信息(例如前面提到的AD角色)。我并不是说我应该购买该产品,因为没有可编程的解决方案,而作为示例,身份验证和使用资源是两个单独的实体,因此不必针对此问题进行组合。
但是,实际上,我已经读到许多项目正在将Microsoft和Apache服务结合在一起以允许身份验证。这是一篇很好的博客文章,概述了一些好处。用户针对IIS进行身份验证后,会将其转发到apache上的应用程序。无论如何,混合使用IIS和Weblogic似乎不是一个好主意,特别是在尝试配置两个节点之间的通信时。
堆栈和网络上还有大量帖子,可追溯到2012年之前,推荐各种解决方案。一篇文章建议以下内容:
您可以在服务器验证客户端证书时指定一组可接受的证书策略
虽然从总体上来说,答案是有意义的,但作者从不对架构细节进行任何沟通。其他一些帖子推荐使用JOSSO来执行SSO功能,例如前面提到的网关机制。这篇文章还讨论了如何使用制造商提供的驱动程序直接使用PKCS11读取智能卡。还有一些没有答案的问题,例如使用java中使用DOD发行的CAC对AD服务器用户进行身份验证。
考虑到这些职位之间的平均间隔时间为5年,我不确定今天针对此问题的最佳做法。网关方法是进行身份验证的理想方法吗?我的想法根本不适用,并且存在更好的解决方案吗?