Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java与ADF对话?_Java_Saml_Adfs_Shibboleth_Opensaml - Fatal编程技术网

如何从Java与ADF对话?

如何从Java与ADF对话?,java,saml,adfs,shibboleth,opensaml,Java,Saml,Adfs,Shibboleth,Opensaml,我们有一个网站在Caucho树脂上运行。它主要是使用JSP用Java编写的。我们在网站上有自己的自定义身份验证。(我们不使用任何第三方身份验证框架。)我们现在希望支持使用SAML的联合。首先,IDP将运行ADF,但我的问题是关于SAML的。特别是,如何使用OpenSAML、Shibboleth或其他Java兼容选项与Java应用程序中的上游IDP联合 编辑:另一个选项是OAuth。赞成的意见?缺点?您的应用程序需要直接(从代码中)或间接(例如通过反向代理、应用程序服务器等上的SAML SP支持)

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


编辑:另一个选项是OAuth。赞成的意见?缺点?

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

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

  • 自己编写SAML SP(最有可能的是,您可以在现有产品的源代码中找到示例)
  • 使用现成的产品集成到应用程序中,如或
对于间接选项(需要较少修改应用程序),您可以:

  • 在Apache反向代理上使用(如果使用)
  • 将SAML SP部署为容器上的另一个应用程序(例如Spring SAML或OpenAM),并使其与应用程序通信-因此SAML SP使用ADF执行身份验证,并通过共享cookie或自定义令牌将其与应用程序通信
您可以找到更多比较详细信息和注意事项


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

Caucho提供的树脂身份验证程序对联邦没有帮助。相反,您需要添加一个ServletFilter来查找未经身份验证的用户。当它找到一个时,您应该引导他们进入登录页面。在这方面,您应该询问用户是否希望直接登录到您的站点或加入其他组织。(这可以通过显示用户名/密码表单+可信第三方的徽标来完成。)在前一种直接登录情况下,使用树脂验证器检查您的本地用户repo或您现在正在执行的操作。对于联邦情况,使用SAML

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

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

如果这超出了您想要编写的代码范围,请签出一个开源或商业SAML服务器。它需要像SP一样工作,并且应该在树脂中运行以保持简单。一个吝啬和吝啬的候选人是。您可以将其部署到树脂中,它将同时处理请求和回复

关于OAuth的注释


您现在考虑的是联合(或Web单点登录)。OAuth不适合联邦。它是一个协议,旨在进行委托授权。OpenID基金会扩展了OAuth2,以支持OAuthID的OpenID连接配置文件中的联邦。ADFS不支持此联合协议,仅限于WS-federation和SAML。因此,如果您的合作伙伴将使用ADFS,您不应该研究OAuth。

不使用OAuth,ADFS应该支持启用SAML,我曾在ADFS上工作过,我的应用程序充当服务提供商,能够使用ADFS url:ADFS/ls连接ADFS服务器并使用ADFS元数据文件。另一方面,在ADFS配置中,我配置ADFS以了解我的应用程序在您的案例中连接的IDP的详细信息,并加载IDP的元数据。基于声明映射和x.509证书验证,我能够进行身份验证