passport-saml lib 无法使用私有解密密钥正确解密 saml EncryptedAssertion

WABBIT0111

我有一个需要解密的加密 SAML 2.0 响应/断言。格式如下:

<saml:EncryptedAssertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
    <xenc:EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">
      <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <xenc:EncryptedKey>
          <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p"/>
          <xenc:CipherData>
            <xenc:CipherValue>{some ciphers}</xenc:CipherValue>
          </xenc:CipherData>
        </xenc:EncryptedKey>
      </ds:KeyInfo>
      <xenc:CipherData>
        <xenc:CipherValue>{assertion body}</xenc:CipherValue>
    </xenc:CipherData>
    </xenc:EncryptedData>
</saml:EncryptedAssertion>

我还有一个私人解密密钥,格式如下:

-----BEGIN RSA PRIVATE KEY-----
{mumbo jumbos}
-----END RSA PRIVATE KEY-----

我在这里尝试使用 OneLogin 的 saml 解密工具来解密加密的 SAML 断言(复制+粘贴到该输入框),并且它的工作原理非常棒。https://www.samltool.com/decrypt.php

但是,当我尝试使用 nodejs、passport-saml 导入私钥文件并尝试解密响应时,如果我省略 ("-----BEGIN----"或“---END---”横幅),或者它会收到“无效的 RSAES-OAEP 填充”错误。

这是我的代码片段:

const fs = require('fs');
const Promise = require('bluebird');
const path = require('path');
const forge = require('node-forge');
let pkey = fs.readFileSync(path.join(__dirname,'./myTestKey.pem'), 'utf8');
//let testKey = new Buffer(pkey).toString('base64');
let SAML = require('passport-saml/lib/passport-saml/saml.js');
let saml = new SAML({...,decryptionPvk: pkey });
let validatePostResponseAsync = Promise.promisify(saml.validatePostResponse);

validatePostResponseAsync(myResponse, pkey)
.then(response=>{
})
.catch(error=>{
 // it always throw error of the 2 mentioned above. 
})

任何解决方法将不胜感激。

WABBIT0111

我想我想通了。对于那些正在为类似问题而苦苦挣扎的人,您必须包含---BEGIN RSA PRIVATE KEY------END RSA PRIVATE KEY---如果不包含横幅,则passport-saml lib 所依赖的node-forge 库将引发错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SAML 2.0解密EncryptedAssertion是否删除名称空间声明?

来自分类Dev

如何使用generateProviderServiceMetadata()处理passport-saml

来自分类Dev

Spring SAML:解密加密密钥时出错,没有安装的提供程序支持此密钥

来自分类Dev

Saml令牌解密时出错

来自分类Dev

使用passport-saml身份验证后,如何重定向回原始请求的URL?

来自分类Dev

rails saml如何解密xml?

来自分类Dev

Spring Security SAML-签名和解密

来自分类Dev

Node.js SAML注销无法正常工作-saml + adfs

来自分类Dev

使用Okta的证书的SAML问题

来自分类Dev

SAML对话使用什么编码?

来自分类Dev

使用SAML 1.1的Spring Security

来自分类Dev

使用ADFS的Spring SAML扩展

来自分类Dev

使用 SAML 从 AD 检索数据

来自分类Dev

ComponentSpace SAML SSO 和没有私钥的解密断言

来自分类Dev

Spring saml:密钥太长,无法解包:invalidkeyexception

来自分类Dev

Spring saml:密钥太长,无法解包:invalidkeyexception

来自分类Dev

SAML 配置

来自分类Dev

护照-saml和SAML加密

来自分类Dev

Spring Security SAML使用哪个密钥?

来自分类Dev

无法使用ColdFusion验证SAML声明

来自分类Dev

密钥泄漏:外部IdP无效的SAML响应

来自分类Dev

SAML单一注销的密钥库

来自分类Dev

SAML RSA和AES解密-末尾的随机垃圾字节

来自分类Dev

带有Django身份验证的SAML

来自分类Dev

Spring SAML一次使用条件

来自分类Dev

使用Spring SAML作为IDP而不是SP

来自分类Dev

使用Spring SAML从https加载元数据

来自分类Dev

使用Java的SAML身份提供程序

来自分类Dev

使用PingFederate为SSO配置Spring SAML