我很想尝试确定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读取智能卡。还有一些没有答案的问题,例如使用java中使用DOD发行的CAC对AD服务器用户进行身份验证。
考虑到这些职位之间的平均间隔时间为5年,我不确定今天针对此问题的最佳做法。网关方法是进行身份验证的理想方法吗?我的想法根本不适用,并且存在更好的解决方案吗?
我花了一些时间来提取问题,所以-您想达到什么目的?但是-让我们尝试:
正如您提到的CAC / AD-我将假定每个客户端都需要自己的密钥对和签名证书。您想使用智能卡(可以托管密钥对和证书)实现SSO(单点登录)。
Java Web应用程序在哪里进行智能卡身份验证?
智能卡通常用作密钥库(可通过PKCS11密钥库访问)。它可能包含多个密钥对和证书。使用方式-网络浏览器(大多数)都可以使用智能卡证书与服务器建立双向(双向)SSL。
通常的做法是终止Web服务器/代理上的SSL,并将证书信息(DN)作为HTTP标头(例如x-client-cert)传递到后端服务。F5 BIGIP是一个非常好的工具,为此目的,我们通常使用Apache或Nginx作为更简单,更便宜的选择。
笔记:
一个完全不同的问题是如何将HTTP标头转换为用户主体(身份)及其权限/角色。您可以为此编写一个servlet筛选器,但是对于较大的部署,可以使用身份服务器(F5 APM,WSO2 IS,OpenAM)有效地将客户端证书信息转换为其他协议(SAML,OAuth等)提供的用户身份。 )
如果所有这些应用程序都需要,在哪个阶段执行CAC / AD身份验证?
从技术上讲-建立SSL连接时。因此,无论您是将客户端证书信息提供给代理服务器还是身份服务器-这都不重要,这里重要的部分是该信息将提供给所有其他应用程序(作为代理后面的HTTP标头或要求使用SAML,OAuth的声明) ,...其他身份验证)。
网关方法是进行身份验证的理想方法吗?我的想法根本不适用,并且存在更好的解决方案吗?
网关方法非常普遍且可靠。传递任何信息之前,请不要忘记清理HTTP标头。
另一个选择是使用身份服务器,这使您可以与外部(云)服务集成。但是-这是一台独立的服务器,具有所有麻烦(部署,维护,知识等)
另一种选择-您可能需要智能卡才能登录到AD客户端工作站,然后使用普通的SPNEGO(Kerberos)SSO :)
希望对您有帮助,消除疲劳
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句