首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSAML和RelayState

OpenSAML和RelayState
EN

Stack Overflow用户
提问于 2018-02-07 22:09:07
回答 2查看 2.3K关注 0票数 0

我在这里浏览了一下论坛,读了一些帖子,但我认为我的问题没有答案。话虽如此,我绝对不是SAML专家,所以我读到的一些帖子是带着光泽的眼睛这样做的:)。

我继承了一些使用OpenSAML (在SP端)来生成请求并将其发送到ADFS实现的代码。我正在调查的问题是,用户总是返回到相同的url,而不管最初的请求,比如说进入网站的深度链接。现在,在ADFS方面,我知道返回到SP的重定向是静态的,这是没有帮助的,但我99.9%确定我们没有向提供程序传递任何重定向值。从我的研究来看,我认为我应该使用RelayState来传递这个值,这样它就会被回显给我,这样我就可以在处理SAML响应之后使用它。

我的问题是,我不清楚如何首先通过RelayState。在我正在使用的代码中,我可以看到定义了一个类--

代码语言:javascript
复制
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之类的逻辑。我已经寻找了一段时间了,但我还没有找到一个我确信将会是我正在寻找的例子--所以我希望有一位专家可以帮助我?

EN

回答 2

Stack Overflow用户

发布于 2018-08-16 23:54:34

你的想法肯定是对的。您需要保存用户最初输入的URL,并将其用作中继状态。

对于OpenSAML v3,您需要将中继状态附加到MessageContext。您必须找到您的应用程序正在构建MessageContext的位置,并执行以下操作:

代码语言:javascript
复制
SAMLBindingSupport.setRelayState(messageContext, relayState);

这是由OpenSAML库提供的一个方便的方法;在后台,它从您的MessageContext访问SAMLBindingContext子上下文(如果需要,创建它),并在其上设置中继状态。

代码语言:javascript
复制
messageContext.getSubcontext(SAMLBindingContext.class, true).setRelayState(relayState);
票数 1
EN

Stack Overflow用户

发布于 2018-02-08 03:03:49

根据this,RelayState通常用于IDPInitiated。

根据this的说法,“不要被RelayState服务于两个完全不同的目的的事实所迷惑。对于IdPInitiated,RelayState指定了SP的登录页。对于SPInitiated,这是SP在发送和接收AuthnRequest响应之间维护状态信息的一种方式。RelayState可以与AuthnRequest一起发送,IDP必须将此RelayState与SAML响应一起返回。”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48665917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档