SAMLResponse 是否应该包含额外的换行符?
Should SAMLResponse contain extra line breaks?
我一直在研究从 third-party IdP 检索 SAMLResponse 的解决方案,我们只需使用 jdk Base64 解码器解码 SAMLResposne,
然而,其中一种情况是我们在某些字符后得到带有换行符 (\n) 的 SAMLResponse,当我们尝试使用
对其进行解码时
...
byte[] base64DecodedResponse = Base64.getDecoder().decode(authnResponse);
...
这个 authnResposne
是来自 HTTP header 的 SAMLResponse,它有 \n
新行,这在上面的代码中解析失败。
我一直在寻找确认 SP 收到的任何 SAMLResponse 是否必须采用 Base64 编码格式,因此不应包含换行符,或者它可以包含并且 SP 应该处理它。
从 SP 端应用修复很简单,只需 .replaceAll("\n","")
即可,但编辑 SAMLResponse 真的是行业标准吗?
您可能需要使用 Base64.Decoder getUrlDecoder()
SAML2 应该在 base64url 中编码 - 基本上是使用 URL 和文件名安全字母 https://www.rfc-editor.org/rfc/rfc4648#section-5.
的 Base 64 编码
getUrlDecoder 还应拒绝 base64 中的嵌入换行符,因此它可能对您没有任何好处。
我很想知道您使用的是哪个 SAML 提供商。
在这里寻找智慧的人,
在签名后编辑 SAMLResponse 是不好的做法。
根据 SAML 文档,SAMLResponse 编码可以采用 BASE 64 内容传输编码 RFC-2045 or Base64 Encoding RFC-4648。
来自 SAML 2.0 core-doc,第 5 部分
Profiles MAY specify alternative signature mechanisms such as S/MIME or signed Java objects that contain SAML documents. Caveats about retaining context and interoperability apply
这导致 SP 应该能够解码标准和 MiMe 解码的理由,因此使用 Base64.getMimeDecoder() 的 try and catch 块来解决这个问题。
我一直在研究从 third-party IdP 检索 SAMLResponse 的解决方案,我们只需使用 jdk Base64 解码器解码 SAMLResposne, 然而,其中一种情况是我们在某些字符后得到带有换行符 (\n) 的 SAMLResponse,当我们尝试使用
对其进行解码时...
byte[] base64DecodedResponse = Base64.getDecoder().decode(authnResponse);
...
这个 authnResposne
是来自 HTTP header 的 SAMLResponse,它有 \n
新行,这在上面的代码中解析失败。
我一直在寻找确认 SP 收到的任何 SAMLResponse 是否必须采用 Base64 编码格式,因此不应包含换行符,或者它可以包含并且 SP 应该处理它。
从 SP 端应用修复很简单,只需 .replaceAll("\n","")
即可,但编辑 SAMLResponse 真的是行业标准吗?
您可能需要使用 Base64.Decoder getUrlDecoder()
SAML2 应该在 base64url 中编码 - 基本上是使用 URL 和文件名安全字母 https://www.rfc-editor.org/rfc/rfc4648#section-5.
的 Base 64 编码getUrlDecoder 还应拒绝 base64 中的嵌入换行符,因此它可能对您没有任何好处。
我很想知道您使用的是哪个 SAML 提供商。
在这里寻找智慧的人,
在签名后编辑 SAMLResponse 是不好的做法。
根据 SAML 文档,SAMLResponse 编码可以采用 BASE 64 内容传输编码 RFC-2045 or Base64 Encoding RFC-4648。
来自 SAML 2.0 core-doc,第 5 部分
Profiles MAY specify alternative signature mechanisms such as S/MIME or signed Java objects that contain SAML documents. Caveats about retaining context and interoperability apply
这导致 SP 应该能够解码标准和 MiMe 解码的理由,因此使用 Base64.getMimeDecoder() 的 try and catch 块来解决这个问题。