【问题标题】:How do I talk to ADFS from Java? [closed]如何从 Java 与 ADFS 对话? [关闭]
【发布时间】:2015-03-30 04:45:44
【问题描述】:

我们有一个在 Caucho Resin 上运行的网站。它主要是使用 JSP 用 Ja​​va 编写的。我们在网站上有自己的自定义身份验证。 (我们没有使用任何第三方身份验证框架。)我们现在希望支持使用 SAML 的联合。首先,IdP 将运行 ADFS,但我的问题是关于 SAML。特别是,我如何使用 OpenSAML、Shibboleth 或其他一些 Java 兼容选项与我们的 Java 应用程序中的上游 IdP 联合

编辑:另一种选择是 OAuth。优点?缺点?

【问题讨论】:

    标签: java saml adfs shibboleth opensaml


    【解决方案1】:

    Caucho 提供的 Resin Authenticators 对联邦没有帮助。相反,您需要添加一个 ServletFilter 来查找未经身份验证的用户。当它找到一个时,您应该将它们定向到登录页面。在这一点上,您应该询问用户是否想直接登录到您的站点或联合到另一个组织。 (这可以通过显示用户名/密码表单+受信任的第三方的徽标来完成。)在前一种直接登录的情况下,使用 Resin Authenticator 来检查您的本地用户存储库,或者您现在正在执行此操作。对于联合案例,请使用 SAML。

    联合将首先向受信任的合作伙伴(ADFS 服务器)发送身份验证请求。这是a little XML document 打包到一个表单中,每个请求都需要更改一些内容(例如,创建时间)。这可以通过 String.format 完成——没什么复杂的。将此身份验证请求发送到用户选择的组织的 SAML 服务器(即 ADFS)。他们将登录并将身份验证响应发送到您需要创建的一些“断言消费者服务”。

    ACS 只是一个接收 SAML 身份验证响应的端点。这需要是一个未经身份验证的端点,它将解析和验证来自 ADFS 的回复。使用 OpenSAML 来执行此操作。你需要做很多事情来确保它是有效的。例如,您必须验证断言的数字签名。您还需要检查发布时间,它不是在未来。通过检查确认数据、受众和收件人中的目标来验证断言是否适合您。等等等等。

    如果这超出了您想要编码的范围,请查看开源或商业 SAML 服务器。它需要作为 SP 运行,并且应该在 Resin 中运行以保持简单。一位卑鄙精干的候选人是Asimba。你可以将它部署到 Resin 中,它会同时处理请求和回复。

    关于 OAuth 的说明

    您在这里考虑的是联合(或 Web 单点登录)。 OAuth 不适合联合。它是一种旨在进行委托授权的协议。 OpenID 基金会已扩展 OAuth 2 以支持 OAuth 的 OpenID Connect 配置文件中的联合。 ADFS 不支持此联合协议,并且仅限于 WS-Federation 和 SAML。因此,如果您的合作伙伴将使用 ADFS,您不应该考虑 OAuth。

    【讨论】:

      【解决方案2】:

      您的应用程序需要直接(从您的代码)或间接(例如通过反向代理、应用程序服务器等上的 SAML SP 支持)充当 SAML SP。

      对于直接选项(需要对您的应用程序进行更多修改),您可以:

      • 自己编写 SAML SP 代码(很可能使用 OpenSAML,您可以在现有产品的来源中找到示例)
      • 使用现成的产品集成到您的应用程序中,例如Spring SAMLOpenAM Fedlet

      对于间接选项(需要对您的应用程序进行较少修改),您可以:

      • 在您的 Apache 反向代理上使用 Shibboleth SAML SP plugins(如果您使用的话)
      • 将 SAML SP 部署为容器上的另一个应用程序(例如 Spring SAML 或 OpenAM),并使其与您的应用程序通信 - 因此 SAML SP 使用 ADFS 执行身份验证并将其传达给您的应用程序,例如通过共享 cookie 或自定义令牌

      您可以找到更多的比较细节和注意事项in this thread

      ADFS 3 应该支持 OAuth 授权服务器,它可能是一种更简单的集成方式,请参阅 herehere。使用 OAuth 实现身份验证通常比 SAML 容易得多,没有相关缺点。

      【讨论】:

      • 而不是使用 OAuth,ADFS 应该支持启用 SAML,我曾在 ADFS 上工作,我的应用程序充当服务提供商,能够使用 ADFS url 连接 ADFS 服务器:adfs/ls 并使用 ADFS 元数据文件.另一方面,在 ADFS 配置中,我将 ADFS 配置为了解我的应用程序连接的 IDP,在您的情况下 shiboleth 详细信息并加载 IDP 的元数据。并基于声明映射和 x.509 证书验证,我能够进行身份验证
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多