Java 在SSO期间,如何在TAI和ACS处理SAML响应后访问SAML响应

Java 在SSO期间,如何在TAI和ACS处理SAML响应后访问SAML响应,java,security,websphere,single-sign-on,Java,Security,Websphere,Single Sign On,我开发了一个自定义web应用程序(WAR),需要从请求对象检索SAML响应并从中提取用户配置文件属性。在WebSphere(服务提供商)上部署相同的 正在尝试实施以下方法,其中:: -OneLogin(身份提供者)发送SAML响应和中继状态 -SAML响应由ACS应用程序处理 -ACS应用程序将用户重定向到自定义web应用程序(在IdP的RelayState中设置) -然后,该应用程序将从请求中检索SAML响应对象,用用户配置文件属性填充动态缓存,并将用户重定向到主应用程序主页 目前,当ACS重

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

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

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

如有任何帮助/建议,将不胜感激

热烈的问候,
Ekansh

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


现在,如果您将用户重定向到自定义web应用程序并希望使用SAML,那么您最好在应用程序中实现一个SAML服务提供程序库,并且您的自定义web应用程序将充当另一个在OneLogin中注册的SAML客户机。本例中的用户将获得类似SSO的体验,以防在身份提供程序(本例中为OneLogin)上启用SSO,因为他在登录到ACS时已经对自己进行了身份验证。

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

谢谢。我能够从SAML令牌中提取SAML属性,以防两端都存在用户(IdP和SP)。但是,当用户确实存在于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。谢谢。但我对此有疑问。目前我使用的是WAS8.0.0.4。您提到的“默认配置选项”是否为“sso_uu.sp.idMap”?尝试将此属性的值设置为“idAssertion”,但出现以下错误(即使服务器设置为信任所有域-入站)WSCredential W SECJ5008W:com.ibm.wsspi.security.cred.realm()中指定的域与当前领域(defaultWIMFileBasedRealm)不匹配。这可能会在尝试发出下游请求时导致问题。SECJ0129E:用户ekansh:my Idp URL的授权失败,调用GET on default_host:/wps/myportal/RightEverywhere时,授权失败,未授予任何所需角色:所有角色这与角色映射有关。请参见中的示例图19。如果这不能解决问题,请告诉我。谢谢。我能够从SAML令牌中提取SAML属性,以防两端都存在用户(IdP和SP)。但是,当用户确实存在于SP端并且需要创建时,情况又如何呢。在这种情况下,即使ACS未授权访问,SAML令牌是否仍然存在。由于用户特定信息(例如:用户名、电子邮件等)存在于SAML令牌中,因此我需要相同的信息来为此类场景创建一个新的动态用户。我想您的意思是说,用户不存在于SP,但存在于IdP,在这种情况下,是的,您的IdP将验证用户并向ACS提供有效的SAML令牌,现在,由ACS决定是否需要动态创建用户,或要求他联系管理员或向他显示故障。SAML在这方面没有任何作用。如果您认为我之前的输入在某种程度上帮助了您,请不要忘记将其标记为答案。谢谢Soumen。默认的WebSphereACS应用程序似乎将用户标记为未经授权。因此,在我的应用程序中,当我试图获取subject时,然后依次从subject获取SAML令牌集[](PrivateCertificates)。它正在返回一个空数组[]。在这种情况下,有没有办法让默认ACS仍然发送SAML令牌。