我在这里浏览了论坛,并阅读了几个主题,但我不认为我的问题有答案。话虽如此,我绝不是SAML专家所以我读过的一些主题是用光滑的眼睛:)。
我继承了一些使用OpenSAML(在SP端)生成请求并将其发送到ADFS实现的代码。我正在研究的问题是,用户总是返回到相同的URL,无论初始请求是否指向网站的深层链接。现在,在ADFS方面,我知道重定向回SP是静态的,这对我们没有帮助,但我99.9%确定我们没有将任何重定向值传递给提供者。根据我的研究,我认为我应该使用RelayState来传递值,以便它回显给我,以便我可以在处理SAML响应后使用它。
我的问题是我不清楚如何首先传递RelayState。在我正在使用的代码中,我可以看到一个定义的类 -
public class HTTPRedirectTransportSender extends HTTPServletTransportSender
{
private static final transient Logger LOG = LoggerFactory.getLogger(HTTPRedirectTransportSender.class);
public HTTPRedirectTransportSender(HttpServletResponse httpServletResponse)
{
super(httpServletResponse);
}
@Override
protected BaseHttpServletResponseXMLMessageEncoder buildMessageEncoder()
{
return new HTTPRedirectDeflateEncoder();
}
}
..如果我查看HttpRedirectDeflateDecoder,那么我可以看到关于构建url等的一些逻辑。我现在已经找了一段时间,但我还没有找到一个例子,我肯定会是我想要的 - 所以我希望那里的专家可以提供帮助吗?
答案 0 :(得分:1)
您肯定正在考虑正确。您需要保存用户最初输入的URL,并将其用作中继状态。
对于OpenSAML v3,将中继状态附加到MessageContext
。您必须找到应用程序在哪里构建MessageContext
并执行以下操作:
SAMLBindingSupport.setRelayState(messageContext, relayState);
这是OpenSAML库提供的便捷方法。在后台,它正在从SAMLBindingContext
访问MessageContext
子上下文(如有必要,请创建它)并在其上设置中继状态。
messageContext.getSubcontext(SAMLBindingContext.class, true).setRelayState(relayState);
答案 1 :(得分:0)