如何正确解码 Java(HTTP 重定向)中的 SAML 请求?
How can I properly decode a SAML request in Java (HTTP redirect)?
我正在使用 HTTP 重定向绑定处理 SAML 请求。
我在另一个 post 中读到需要以下步骤才能检索 SAML 请求的原始内容(URL 中的 SAMLRequest 参数):
- URL解码
- Base64解码
- 膨胀内容
虽然这些步骤对我来说很清楚,但我无法获得 XML 格式的 SAML 请求。我相信错误在第三步,也许有不止一种方法来膨胀字节?这是执行以上三个的 Java 函数,给出的参数是 URL.
中 SAML 参数的值
private String decodeMessage(String SAMLContent) {
try {
//URLDecode, Base64 and inflate data
//URLDecode
SAMLContent = URLDecoder.decode(SAMLContent, "UTF-8");
//Base64 decoding
SAMLContent = new String(Base64.getDecoder().decode(SAMLContent), "UTF-8");
//Inflating data
try {
byte[] compressed = new byte[10 * SAMLContent.getBytes().length];
Inflater i = new Inflater(true);
i.setInput(SAMLContent.getBytes(), 0, SAMLContent.getBytes().length);
int finalSize = i.inflate(compressed);
//Exception is thrown here
SAMLContent = new String(SAMLContent.getBytes(), 0, finalSize, "UTF-8");
i.end();
} catch (DataFormatException ex) {
JOptionPane.showMessageDialog(null, "DFE: " + ex.getMessage());
}
} catch (UnsupportedEncodingException ex) {
JOptionPane.showMessageDialog(null, "UEE: " + ex.getMessage());
}
return SAMLContent;
}
如果我复制并粘贴第一步 here 的输出,我可以在页面底部看到格式正确的 XML,所以至少 URL解码按预期工作。
如果您有任何解决方案,请告诉我,谢谢。
我就是这样做的。流程是检测请求是 HTTP-Redirect,base64 解码请求然后膨胀它。以下链接指向在 github.
中执行所有这些操作的代码
如果你得到
Incorrect header check
检查这个answer
您可能需要将膨胀代码更改为:
return new String(inflatedData, 0, inflatedBytesLength, "UTF-8");
我正在使用 HTTP 重定向绑定处理 SAML 请求。 我在另一个 post 中读到需要以下步骤才能检索 SAML 请求的原始内容(URL 中的 SAMLRequest 参数):
- URL解码
- Base64解码
- 膨胀内容
虽然这些步骤对我来说很清楚,但我无法获得 XML 格式的 SAML 请求。我相信错误在第三步,也许有不止一种方法来膨胀字节?这是执行以上三个的 Java 函数,给出的参数是 URL.
中 SAML 参数的值private String decodeMessage(String SAMLContent) {
try {
//URLDecode, Base64 and inflate data
//URLDecode
SAMLContent = URLDecoder.decode(SAMLContent, "UTF-8");
//Base64 decoding
SAMLContent = new String(Base64.getDecoder().decode(SAMLContent), "UTF-8");
//Inflating data
try {
byte[] compressed = new byte[10 * SAMLContent.getBytes().length];
Inflater i = new Inflater(true);
i.setInput(SAMLContent.getBytes(), 0, SAMLContent.getBytes().length);
int finalSize = i.inflate(compressed);
//Exception is thrown here
SAMLContent = new String(SAMLContent.getBytes(), 0, finalSize, "UTF-8");
i.end();
} catch (DataFormatException ex) {
JOptionPane.showMessageDialog(null, "DFE: " + ex.getMessage());
}
} catch (UnsupportedEncodingException ex) {
JOptionPane.showMessageDialog(null, "UEE: " + ex.getMessage());
}
return SAMLContent;
}
如果我复制并粘贴第一步 here 的输出,我可以在页面底部看到格式正确的 XML,所以至少 URL解码按预期工作。 如果您有任何解决方案,请告诉我,谢谢。
我就是这样做的。流程是检测请求是 HTTP-Redirect,base64 解码请求然后膨胀它。以下链接指向在 github.
中执行所有这些操作的代码如果你得到
Incorrect header check
检查这个answer
您可能需要将膨胀代码更改为:
return new String(inflatedData, 0, inflatedBytesLength, "UTF-8");