使用Java读取从Azure活动目录接收的SAML响应

时间:2018-08-24 12:23:57

标签: azure-active-directory openid saml adfs adal

我是天蓝色活动目录(AAD)的新手,到目前为止,我已经在天蓝色AD中创建了企业应用程序,并且对该应用程序进行了设置,我为Single sign-on option选择了集成的Windows auth(IWA)。我已经在其中配置了应用程序代理,并且pre-authentication设置为AAD,而internal URL是基于Java的Web应用程序URL。

在另一侧,以联合身份验证(ADFS)的形式安装AAD连接器。

现在的流程是:当我点击User access URL(企业应用程序的URL)时,它会挑战域验证,并在成功验证后将其重定向到我的本地AD表单。成功验证ADFS后,它会重定向到我的Web应用。

现在我收到的响应是SAML响应。

我的问题是如何使用java读取此SAML响应,我发现ADAL是这样做的一种方法。 here是我发现的示例项目。

但是在我看来,这没有用。是通过其他任何方式读取此响应或进行任何修改。

问题可能很广泛:那么是否有相同的建议或参考链接?

更新:

我的应用程序未直接收到SAML响应。通过应用代理接收的响应不是SAML。或者我们可以添加一些自定义标头作为应用代理发送的响应。请在下面找到图片以更好地了解

SAML tracer: trace for login sequence

Update2:

是否可以发送自定义标头以响应Azure应用代理发送的邮件?

当前接收的标头是

  1. 连接
  2. 授权谈判
  3. cookie
  4. 主机
  5. 其他诸如x-forward-by,语言,编码

2 个答案:

答案 0 :(得分:1)

看起来您的设置可能没有问题,但是当前对Azure AD应用程序代理有一个限制,即它无法将SAML令牌传递给内部Web应用程序进行SSO。

请查看下面的链接,这似乎是Azure AD团队的计划中项目,您可以尝试与Microsoft支持确认这一点,并从中获取有关可能的解决方法的详细信息。

我希望这会有所帮助!

  1. 应用程序代理-SAML作为SSO选项 https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/33318022-app-proxy-saml-as-sso-option

    他们在这里提到这项工作已经开始,并且甚至提出了解决方法并分享联系信息以询问更多详细信息。

    enter image description here

  2. 启用SAML令牌以通过Azure应用程序代理流到内部站点 https://feedback.azure.com/forums/374982-azure-active-directory-application-requests/suggestions/19204666-enable-saml-tokens-to-flow-through-azure-applicati

    这一个人更详细地解释了问题

    enter image description here


更新:这是我从Azure AD反馈团队收到的回复中的内容

第1部分:在应用程序代理中配置应用程序

步骤1:添加一个新的企业应用程序,然后选择“本地应用程序”选项。使用作为应用程序标识符的内部URL以及您希望用户在外部时使用的外部URL填写应用程序信息。确保选择包含可访问应用程序的连接器的连接器组-如果您仅遵循第0部分中的步骤并且尚未创建新的连接器组,则正确的组为“默认”。

enter image description here

第2步:通过“用户和组”菜单将用户分配给应用程序

enter image description here

第2部分:配置SAML应用

第1步:添加另一个应用程序,但是这次选择“非图库应用程序”

enter image description here

第2步:由于用户是通过Application Proxy应用程序分配的,因此无需在此处分配用户。在属性菜单中,关闭“需要用户分配”字段。

步骤3:在相应菜单中配置“单点登录”设置。选择“基于SAML的登录”。提供您的应用程序的应用程序标识符。将Reply URL作为Application Proxy外部URL(在第1部分,第1步中配置)。选择用户标识符的类型,并添加令牌的签名证书。 您的应用程序现在可以使用了。可以通过应用程序代理外部URL或通过访问面板来访问它。

enter image description here

答案 1 :(得分:0)

ADAL是用于OpenID Connect而非SAML的库。

看看Spring Security或OpenSAML的代码-开源和Java。

本质上,它只是XML。

还有online tools会给您一些提示。