【问题标题】:How to access SAML Response after TAI and ACS have processed it during SSO在 SSO 期间 TAI 和 ACS 处理后如何访问 SAML 响应
【发布时间】:2017-10-09 16:24:05
【问题描述】:

我开发了一个自定义 Web 应用程序 (WAR),它需要从请求对象中检索 SAML 响应并从中提取用户配置文件属性。在 WebSphere(服务提供者)上部署相同

尝试实施以下方法,其中: - OneLogin(身份提供者)发送 SAML 响应和中继状态 - SAML 响应由 ACS 应用程序处理 - ACS 应用程序将用户重定向到自定义 Web 应用程序(在 IdP 的 RelayState 中设置) - 然后此应用程序将从请求中检索 SAML 响应对象,使用用户配置文件属性填充动态缓存并将用户重定向到主应用程序主页。

目前,当 ACS 重定向到自定义 Web 应用程序(设置为中继状态)时,SAML 响应(一旦由 WebSphere TAI 和 ACS 应用程序接收和处理)似乎不可用。是否可以保留 ACS 应用程序的 SAML 响应并将其传递给自定义 Web 应用程序?

任何帮助/指针将不胜感激。

致以诚挚的问候, Ekansh

【问题讨论】:

    标签: java security websphere single-sign-on


    【解决方案1】:

    无法在您的应用程序中获取原始的 SamlResponse 消息。但是,可以从应用程序获取 SAML 令牌(SAML XML 文件)。通常,可以使用此 SAML 令牌通过 SOAP 安全标头或 Http 标头进行 Web 服务调用,或者进行 WS-Trust 调用以将 SAML 令牌交换为用于下游服务调用的新 SAML 令牌。 您可以进行 Web 服务调用(JAX-WS 或 JAX-RS)而不是浏览器重定向吗?如果网络服务调用适合您,我可以帮助您使其正常工作。

    【讨论】:

    • 谢谢。如果用户在两端(IdP 和 SP)都存在,我可以从 SAML 令牌中提取 SAML 属性。但是当用户确实存在于SP端并且需要创建的情况下呢?在这种情况下,即使 ACS 未经授权访问,SAML 令牌是否仍然存在。由于 SAML 令牌中存在用户特定信息(例如:用户名、电子邮件等),因此在这种情况下,我将需要相同的信息来动态创建新用户
    • WebSphere SAML SP 有两个配置选项。默认情况下,用户不必存在于 SP 中,并且主题是从受信任的 SAML 令牌创建的。另一个选项是用户必须在 SP 中。如果用户需要在 SP 中,而用户尚未在 SP 中,我们提供 SPI 供您在创建主题之前创建用户帐户。要创建用户帐户,您需要实现 com.ibm.wsspi.security.web.saml.NameIDMapping 接口。在实施中,如有必要,您可以从 SAML 令牌创建用户条目。在 TAI 配置中,您可以通过添加 sso_1.sp.userMapImpl= 来使用属性来配置此 SPI。
    • 谢谢春龙。但我对此有疑问。目前我正在使用 WAS 8.0.0.4。您提到的“默认配置选项”是“sso_.sp.idMap”吗?
    • 尝试将此属性的值设置为“idAssertion”,但出现以下错误(即使服务器设置为信任所有领域 - 入站)WSCredentialT W SECJ5008W:com.ibm 中指定的领域。 wsspi.security.cred.realm () 与当前领域 (defaultWIMFileBasedRealm) 不匹配。这可能会在尝试发出下游请求时导致问题。 SECJ0129E: 在 default_host:/wps/myportal/RightEverywhere 上调用 GET 时,用户 ekansh:my Idp URL 的授权失败,授权失败,未授予任何所需角色:所有角色
    • 这与角色映射有关。请参阅ibm.com/developerworks/websphere/techjournal/1004_chao/… 中的示例图 19。如果这不能解决问题,请告诉我
    【解决方案2】:

    保留和传递 SAML 响应是没有意义的。本质上,正如协议定义的那样,一旦用户通过@OneLogin 身份验证,它就会在 SAML 响应中将 SAML 令牌发回给 ACS。 ACS 验证 SAML 令牌并允许用户继续进行。

    现在,如果您将用户重定向到自定义 Web 应用程序并希望使用 SAML,那么理想情况下,您应该在应用程序中实现 SAML 服务提供程序库,并且您的自定义 Web 应用程序将充当另一个 SAML 客户端,并在 OneLogin 中注册.在这种情况下,用户将获得类似 SSO 的体验,以防 SSO 在本例 OneLogin 中的身份提供商处打开,因为他在登录 ACS 时已经对自己进行了身份验证。

    【讨论】:

    • 谢谢。如果用户在两端(IdP 和 SP)都存在,我可以从 SAML 令牌中提取 SAML 属性。但是当用户确实存在于SP端并且需要创建的情况下呢?在这种情况下,即使 ACS 未经授权访问,SAML 令牌是否仍然存在。由于 SAML 令牌中存在用户特定信息(例如:用户名、电子邮件等),因此在这种情况下,我将需要相同的信息来动态创建新用户
    • 我认为您的意思是说用户在 SP 中不存在但在 IdP 中存在,在这种情况下是的,您的 IdP 将对用户进行身份验证并向 ACS 提供有效的 SAML 令牌,现在它由 ACS 决定是否需要即时创建用户或要求他联系管理员或向他显示失败。 SAML 在这方面没有任何作用。如果您认为我之前的输入对您有所帮助,请不要忘记将其标记为答案..
    • 谢谢搜门。默认的 Websphere ACS 应用程序似乎将用户标记为未经授权。因此,在我的应用程序中,当我尝试获取主题时,然后又从主题 (privateCredentials) 获取 SAML 令牌的 Set[]。它返回一个空数组 [] 。在这种情况下,我有什么办法可以让默认 ACS 仍然发送 SAML 令牌。
    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 2017-08-21
    • 2013-05-10
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多