java active directory 单点登录_单点登录Kerberos——Active Directory

我们有一个客户需要通过单点登录来保护Web应用程序,将来称为SSO。 它使用用户在登录Windows域时输入的身份验证和授权数据。这里,Web浏览器通过特殊机制(Kerberos)与Web应用程序和Active Directory进行通信,Active Directory在此处充当身份验证服务和票证授予服务。这里可以获得对该机制的简单解释。

现在我们也有客户要求Web应用程序的SSO应该在完善的Websphere Application Server以及Docker容器中的Tomcat中运行。特别是,这是挑战。由于Web应用程序是最广泛意义上的Spring应用程序,因此我们决定将Spring解决方案与Spring Security和Spring Security Kerberos一起使用。通过使用Websphere和Tomcat的配置文件,这很容易集成并且易于配置。

配置

首先,WebApplicationInitializer必须放在类路径中,该路径使用Servlet-3.0 Api自动加载,并springSecurityFilterChain 使用一组HTTP servlet过滤器注册Spring Security 。指定的WebApplicationInitializer必须扩展Spring类AbstractSecurityWebApplicationInitializer,否则可能为空。但是,此WebApplicationInitializer仅注册对servlet过滤器链的引用,因此您还必须创建其他Spring bean。这可以在Java-Config的帮助下轻松完成。为此,将在WebSecurityConfigurerAdapter扩展Spring类的应用程序的ApplicationContext中创建配置@EnableWebSecurity注释。此配置类现在还创建了Kerberos机制所需的Spring Bean。这些特别包括KerberosTicketValidator,KerberosServiceAuthenticationProvider,SpnegoAuthenticationProcessingFilter和SpnegoEntryPoint。

配置可能如下所示的示例:

17e88958d84af4ca79225f3a91215f03.png

64c8cd59e2d403022339c9249a45df13.png

ca26b82da0a899af5bf93ffb649499e4.png

b8b7f21f850a9d393a87f465ab34c6ad.png

a8a67f6a1f08938600561def9982c747.png

8862b7ef6468d1bc32a59d17d8b374b3.png

如您所见,此配置是抽象的,仍然需要实现。现在,已经为Websphere和Tomcat实现了与配置文件相关的映射,以映射不同的系统。所以现在有两种配置。

WebSphere配置

5118e2a8cc988b5598d44cbcf89916ff.png

4b2ba626473958abfff4efd7d900abcf.png

Tomcat配置

fb155734f1bac39289eac5ec67ed4418.png

ddbe4bb6c735f80f4ffcad8255e09b63.png

准备关键配送中心(KDC)

在该示例中,KDC的角色由Active Directory填充。如您所见,配置中引用了所谓的“服务主体”和其他文件,我将在下面讨论。

1. Service-Principal

服务主体SPN(简称SPN)是使用Kerberos身份验证的网络域中的服务名称。它由服务类,主机名和可能的端口组成。在该示例中,每个提供Web应用程序的服务器都有一个HTTP服务类SPN。

HTTP / tomcat.codecentric.deHTTP / websphere.codecentric.de主机名必须与Web浏览器调用应用程序的方式相匹配。在示例中,它可以是URL https://tomcat.provinzial.com:8080/example。这两个SPN现在必须在KDC中注册并分配给用户。为此,在Windows控制台中执行以下命令(PC必须登录到域):

2ee7194a4d8135a843de062a26a4b85e.png

使用此命令,SPN将生成并分配给用户A_KERBEROS_USER。

2. kerberos.keytab

此文件是用于Web应用程序和KDC之间的身份验证的密钥。

4251b612ae817633f847dff0bf2c0ffc.png

该命令为用户A_KERBEROS_USER和密码A_SECRET_PASSWD创建密钥表文件,但这只能用于SPN HTTP / tomcat.codecentric.de。对于SPN HTTP / websphere.codecentric.de,必须类似地生成另一个密钥表文件。

3. krb5.ini

Kerberos本身在此文件中配置。例如,这里配置了KDC:

d1f46560cb7a18e524223382d836d45e.png

此配置高度依赖于Active Directory中的域配置。这只是一个例子。

调用Web应用程序

在创建必要的文件并使用上述Spring配置部署Web应用程序后,调用URL https://tomcat.codecentric.com/example将启动Kerberos机制。首先,应用程序检查调用者是否已经登录,如果没有,则写入SpnegoEntryPointHTTP头(WWW-Authenticate = Negotiate)并返回状态401。因此,Web浏览器知道它必须在新请求中发送Windows用户的数据,即HTTP标头中的Kerberos票证。此票证已存在于票证缓存中,或者仍必须从KDC获取。

Webspheres IBM Runtime Java

不幸的是KerberosTicketValidator,用于Kerberos 的Spring库只包含一个与Oracle JRE一起使用并且明确不与IBM JRE一起使用的库。具体而言,LoginModuleIBM JRE中对实现的引用是不同的。另一个区别是与KDC的通信实施。

IBM实现本质上是一个副本,SunJaasKerberosTicketValidator除了以下摘录:

9396f5011c303b66bd4dd205067a1add.png

f1d52c7f5ba7fd9591e64da94bede884.png

在执行的run()方法是IBM的文档回来。

没有SSO呼叫的可能性

最后一项要求是提供登录Web应用程序而无需通过SSO自动登录的功能。如果用户不想使用自己的用户登录,而是与其他人一起登录,则此功能非常有用。

这个想法很简单。在包含子域nosso的DNS中输入主机名,并指向与没有nosso子域的主机名相同的IP 。在该示例中,还可以通过URL https://tomcat.nosso.codecentric.de/example访问Web应用程序。

在Web应用程序中,然后自己SpnegoEntryPoint实现了投票率。覆盖方法的部分显示了切换。

70705a28510aec0ff46b0a3f43759334.png

因此,调用https://tomcat.nosso.codecentric.de/beispiel不会引发Kerberos机制,反而导致https://tomcat.nosso.codecentric.de/beispiel/login重定向当用户再可以输入所需的用户数据。

结论

开发此解决方案需要大量实验。我希望能够为此做出贡献,使将来能够做的更轻松。

1ce9077ece87edc13371ebe3c4e4b900.png

f249cb7fb097a891aea0a1e74a7e2d31.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值