如何调试我的 SSO SAML 与 zendesk 的集成

How do I debug my SSO SAML integration with zendesk

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

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

用户步骤如下:

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

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

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

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

PS:最初 samlp 并没有开箱即用,我分叉了 repo 并更新了几个依赖项,它开始工作了。

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

一方面,不存在用于 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. Identity Provider issues to Service Provider In step 5, the identity provider issues a message to be delivered by the user agent to the service provider. Either the HTTP POST, or HTTP Artifact binding can be used to transfer the message to the service provider through the user agent. The message may indicate an error, or will include (at least) an authentication assertion. The HTTP Redirect binding MUST NOT be used, as the response will typically exceed the URL length permitted by most user agents.

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

由于您是通过 POST 发送的,因此您的 SAMLResponse 应该而不是 URL 编码 了。