Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 SAML2.0 RelayState参数:如何在WSO2 IS中向登录表单添加额外字段?_Java_Wso2_Saml 2.0_Wso2is_Wso2carbon - Fatal编程技术网

Java SAML2.0 RelayState参数:如何在WSO2 IS中向登录表单添加额外字段?

Java SAML2.0 RelayState参数:如何在WSO2 IS中向登录表单添加额外字段?,java,wso2,saml-2.0,wso2is,wso2carbon,Java,Wso2,Saml 2.0,Wso2is,Wso2carbon,我需要在WSO2 IS中的自定义登录页面中添加一个额外的组合框(其中包含要显示的产品版本)。成功登录后,combox的选择应传递给服务提供商。如上所述,选择可以作为RelayState参数传递。我仍然找不到一个关于如何使用WSO2 IS实现这一点的示例。所以问题是:如何在is端使用RelayState参数进行设置,以及如何在服务提供商端获得其价值?非常感谢java上的任何示例 有两种流动 国内流离失所者发起 SP启动 中继状态:是一个参数,可帮助您处理IdP启动的流量。如果在服务提供者端有多

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

有两种流动

  • 国内流离失所者发起
  • 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);
}
public Object loadUserBySAML(SAMLCredential凭证)
抛出UsernameNotFoundException{
//该方法用于标识用户引用的本地帐户
//SAML断言中的数据,并返回描述用户的UserDetails对象。
字符串userID=credential.getNameID().getValue();
字符串relayState=credential.getRelayState();
LOG.info(userID+“已登录”);
返回新用户(userID,“,true,true,true,authorities);
}

谢谢您的回答!但我如何才能告诉WSO2是接受登录页面上表单的字段来中继状态参数,还是我如何以任何其他方式将字段值传递给SP?不确定,但您可以使用saml断言xml来实现同样的目的。若您看到,您希望从UI上选择的版本驱动sp登录页。要通过RelayState实现同样的目标,还有很多方法。正如我在IdP中看到的,我可以在上面为多个版本创建多个应用程序。因此,用户可以选择所需的应用程序,并基于IdP处的重新系统状态配置,以使应用程序SP重定向正常工作。我不确定WSO2如何实现这一目标。