0

我正在使用 zendesk 在 SAML 服务上设置单点登录。我正在使用 node/express 和使用node-samlp编写自定义 SAML 服务器。

Zendesk 是 SP,我的 SAML 服务器有自己的 IdP

用户步骤如下:

导航到帐户.zendesk.com 并被重定向到帐户.com/login?SAMLRequest=asdfasdfafsd

然后用户输入凭据并发布到节点服务器。在服务器上,我能够解析* SAMLRequest,验证用户并向用户提供 SAMLResponse。

用户从节点服务器接收到 SAMLResponse 并被重定向到:account .zendesk.com?SAMLResponse=asdfasdf&RelayState=xxx

此时,用户会得到一个未找到的页面。我不确定我做错了什么,此时我猜测我的 SAMLResponse 格式错误或者我将用户重定向到错误的地址。

PS:最初 samlp 不能直接使用,我分叉了 repo 并更新了几个依赖项,它开始工作了。

*我最初无法解析来自 zendesk 的 SAMLRequest。当我在查询参数上使用 decodeURIComponent 时,有换行符和空格,我用“+”替换了它,这使它起作用。然后我意识到他们的查询参数似乎不是 URI 编码的......

4

2 回答 2

2

一方面,没有用于 SAML 响应的 SAML 重定向绑定之类的东西。您可以在 HTTP POST 中将 SAML 响应作为表单编码参数发送,但不能在重定向中将其作为查询参数传递。您的 SAML IDP 实施不符合规范,因此 Zendesk 可能会拒绝该消息。

请参阅http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf#page=16

  1. 身份提供者向服务提供者发布 在步骤 5 中,身份提供者向服务提供者发布要由用户代理传递的消息。HTTP POST 或 HTTP Artifact 绑定都可用于通过用户代理将消息传输到服务提供者。该消息可能指示错误,或者将包括(至少)身份验证断言。不得使用 HTTP 重定向绑定,因为响应通常会超过大多数用户代理允许的 URL 长度。
于 2015-06-16T22:39:18.080 回答
1

事实上,正如@hans-z 已经提到的,SAMLResponse 总是通过POST发送!您可以通过提供在页面加载时(通过 JavaScript)自动提交表单(包含 SAMLResponse)的页面来触发此浏览器 POST。

由于您通过POST发送,因此您的 SAMLResponse 不应进行URL 编码

于 2015-06-17T10:59:40.503 回答