java - SAML 2.0 RelayState 参数:如何在 WSO2 IS 中向登录表单添加额外字段?
问题描述
我需要在 WSO2 IS 的自定义登录页面中添加一个额外的组合框(其中包含要显示的产品版本)。成功登录后,应将组合框的选择传递给服务提供商。正如这里所说,选择可以作为 RelayState 参数传递。我仍然找不到关于如何使用 WSO2 IS 做到这一点的示例。所以问题是:如何在 IS 端使用 RelayState 参数进行设置,以及如何在服务提供商端获得它的价值?任何关于 java 的例子都非常受欢迎!
解决方案
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);
}
推荐阅读
- c# - 如何在 EF Core 中禁止默认值?
- linux - 如何查找目录中多个文件的数量和总大小?
- node.js - NodeJS nodejavabridge 在工作线程中初始化时抛出错误
- python - 如何解决 TypeError:在 Jupyter notebook 中使用 numpy 规范化数据时,'tuple' 对象不能被解释为整数
- matlab - Spider_plot 在 matlab 应用程序设计器中不起作用
- ios - Apple ATS 和本地设备,这是一个要求吗?
- javascript - 如何突出显示和选择多行?
- scala - 如何检查数据库及其与 hikaripool 或 quill 的连接是否正常工作?
- c# - SaveChangesAsync 到数据库上下文是否在 .net 5 隔离的 azure 函数应用程序中的 while 循环内正常
- gam - 在 GAM 中记录转换后的数据,如何绘制响应?