如何使用Influitive实现SAML for SSO?

时间:2016-03-29 20:44:25

标签: c# single-sign-on saml

我正在尝试通过SAML为我的Influitive中心实施SSO。我已按照他们的文档here并按照他们的规范设置了我的环境。我有我的证书的指纹以及通过QueryString处理他们的SAMLRequest的端点。

我正在使用概述here的Web浏览器SSO用例。

为了形成我的SAML响应,我按照示例here

我还关注this示例生成证书,以及生成然后签署我的SAML响应。但是,在我努力修复我的实现时,我将签名方法更改为SHA1。

为了提交我的表单,我将我的代码隐藏中的值绑定到POST表单的HTML表单,基本上是这样的:

  <form method="post" action="https://{myhub}.influitive.com/saml/consume" />
    <input type="hidden" name="SAMLResponse" value="{Base64EncodedStringofSAMLResponse}" />
    <input type="hidden" name="RelayState" value="https://{myhub}.influitive.com/about" />
</form>

<script>
    if ("{Base64EncodedStringofSAMLResponse}" != "") {
        window.onload = function () {
            document.forms[0].submit();
        }
    }
</script>


问题是每当我的表单POST时,即使我的SAML响应正确形成,签名和编码,我仍然会收到500内部服务器错误。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题实际上来自我的SAML响应中不必要的“Issuer”标记。

根据我在网上找到的例子,我包含了其中两个。 我取出了Issuer标签的第一个实例,但是在Assertion标签内留下了第二个实例,它起作用了。 有影响力的支持查找了我的集线器的日志,并向我发送了一条错误消息,说明了这一点。

以下是正确形成的签名SAML响应的示例。

<a href="" onclick="window.open('http://www.facebook.com/share.php?u=' + 
encodeURIComponent(location.href))">Share this page</a>

如果您对如何生成此SAML响应有任何疑问,如何使用证书或编码或ANYTHING进行签名,请告诉我们!这是一个巨大的PITA,我很乐意有机会帮助其他人。