来自Java(Jetty下的Spring MVC)应用程序的ADFS身份验证和模拟

Mat*_*ard 6 java impersonation adfs active-directory

我有一个Java Web应用程序,它提供搜索服务,在某些情况下需要检查结果的安全性.如果重要的话,它在Spring MVC中实现并在jetty下运行.

我有一个客户希望网络应用程序的身份验证:

  • 通过Active Directory联合身份验证服务(ADFS)而不是现有的内置机制(以避免单独登录)来完成.
  • 能够在搜索服务器上模拟远程用户,以便可以执行安全检查,在搜索服务器上执行单独的应用程序(它本身不知道有关ADFS的任何信息,但能够在运行时执行相关检查.用户有问题).

这可能,如果是这样,怎么样?

(如果Windows世界术语有点过时道歉 - 这不是我所知道的,但希望至少意图是明确的)


关于我已经看过的谜题的一些注释:

  1. 从Java Servlet模仿用户,这是我多年前的一个问题,涵盖了大致相同的基础,但没有ADFS要求 - 我不确定ADFS如何影响事情,但Waffle(该问题的解决方案)没有似乎没有提供任何支持.
  2. 我见过使用SSO(SAML)和ADFS的Java应用程序以及如何从Java与ADFS对话?,这似乎为ADFS身份验证提供了前进的方法,但我不确定它是否与后续模拟兼容.
  3. 我见过http://blogs.objectsharp.com/post/2010/09/10/Converting-Claims-to-Windows-Tokens-and-User-Impersonation.aspxhttps://msdn.microsoft.com/ en-au/library/ee517278.aspx但我不确定:

    1. 如果我按照上面的SAML或OAuth路径访问,则可以访问必要的声明
    2. 是否可以从Java中实现它
  4. 我认为第二个(模拟)部分与模仿ASP.NET声称身份到Windows身份大致相同,只是我想从Java而不是.Net中进行.

nzp*_*mad 3

你没有提到ADFS版本吗?

您有三个选择:

  • WS-美联储
  • SAML
  • OAuth2

在 Java 世界中,通常使用 SAML。这意味着 SAML 堆栈。

上面的 SO 链接有我的答案,其中包含 SAML 堆栈列表的链接。

由于您已经在使用 Spring,Spring Security 似乎很合适。

Spring Security SAML 扩展

ADFS 目前不支持 OpenID Connect,这会排除 OAuth。

是的 - Spring Security 为您提供了 ADFS 生成的声明列表。

ADFS 确实通过身份委托提供模拟。

不幸的是,这通常是通过 WCF 和 WIF(都是 .NET 构造)完成的。