我正在写一个基于Node的Web服务,希望第三方发送经过压缩和base64编码的SAML请求。在一天的大部分时间里四处闲逛之后,我担心我不确定自己甚至不知道该问些什么(我很抱歉这是骗子)。
文档说:
Webstorm控制台日志具有以下查询字符串:
输出
console.log(req.query.SAMLRequest)
显示URL解码是自动完成的:
因此,我假设我必须先解码base64,然后再对其进行充气。 (我尝试过充气然后解码,但是仍然失败了,这是最有意义的):
var zlibJS = require('zlibjs'); //I've tried Node's own zlib but that only appears to work with call backs
...
var b = new Buffer(samlReq, 'base64');
var decoded = b.toString();
var inflated = zlibJS.inflateSync(decoded); //https://github.com/imaya/zlib.js/blob/master/test/node-test.js
//I get an Unsupported compression method
...//relooking at the test it appears it wants a buffer so switch the above line for this
var inflated = zlibJS.inflateSync(b); // same 500 error
查看github源代码时,当在寻找压缩方法时切换到默认值时会抛出此错误,但是我看不到应该在哪里设置该值。
我试图以疯狂的方式记录日志(出于可读性考虑而删除),并将每一步都放入base64解码器(http://www.motobit.com/util/base64-decoder-encoder.asp),url解码器(http://meyerweb.com/eric/tools/dencoder/)和字符串解压缩器(http://i-tools.org/gzip),但结果无定论(解压缩器工具无法解压缩其自身压缩所以...)
感谢您提供的任何建议,提示和/或工具,可能会对您有所帮助
最佳答案
我在ZLib文章中看到了另一个SO答案提及pako和Wikipedia提及它的信息,所以我给了它一个旋涡,第二次尝试了:
var pako = require('pako');
...
var b = new Buffer(samlReq, 'base64');
var inflated = pako.inflateRaw(b, {to:'string'});
关于node.js - 使用NodeJS处理压缩的base64查询参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24829612/