首页 > 解决方案 > SAML 2.0 RelayState 参数:如何在 WSO2 IS 中向登录表单添加额外字段?

问题描述

我需要在 WSO2 IS 的自定义登录页面中添加一个额外的组合框(其中包含要显示的产品版本)。成功登录后,应将组合框的选择传递给服务提供商。正如这里所说,选择可以作为 RelayState 参数传递。我仍然找不到关于如何使用 WSO2 IS 做到这一点的示例。所以问题是:如何在 IS 端使用 RelayState 参数进行设置,以及如何在服务提供商端获得它的价值?任何关于 java 的例子都非常受欢迎!

标签: javawso2saml-2.0wso2iswso2carbon

解决方案


SAML有两个流程

  • IdP 发起
  • SP 发起

中继状态:是在 IdP 发起流中帮助您的一个参数。如果服务提供商端有多个应用程序,并且在 SAML 断言之后,如果您需要确定哪个应用程序用户必须登陆,那么您可以使用中继状态。您可以直接在中继状态参数中配置应用程序 URL,也可以配置一些有助于识别应用程序的值。

要完成这项工作,应在您的 IdP 中启用 IdP 发起的 SSO。

在 WSO2 IdP 中有 SSO 设置,您可以在那里获取 RelayState 配置。我确实为其他 IdP 配置了 RelayState,可以轻松配置。

以下代码可用于在 SP 端获取 RelayState

public Object loadUserBySAML(SAMLCredential credential)
        throws UsernameNotFoundException {
    
    // The method is supposed to identify local account of user referenced by
    // data in the SAML assertion and return UserDetails object describing the user.
    
    String userID = credential.getNameID().getValue();
    String relayState = credential.getRelayState();
    
    LOG.info(userID + " is logged in");
    

    return new User(userID, "<abc123>", true, true, true, true, authorities);
}

推荐阅读