用于解码和验证签名 SAML 响应的 passport-saml 问题
passport-saml issue for decoding and verifying signed SAML response
我们需要实施基于 SAML 的安全身份验证。我们的 IDP 将是 Okta 和 OneLogin。为此,我们在 node.js Express 应用程序中使用 "passport" + "passport-saml"。我们在 SP 端对 Okta-
使用以下策略配置
var oktaLoginStrategy = {
host: 'http://localhost:3000',
path: '/login/callback',
realm: 'urn:node:app',
entryPoint: "https://dev-528399.oktapreview.com/app/builtiodev528399_oktasp1_1/exkbbi8vwj2OsHjbE0h7/sso/saml",
issuer: "http://www.okta.com/exkbbi8vwj2OsHjbE0h7",
additionalParams: {
'RelayState': "test"
},
signatureAlgorithm: 'sha256',
decryptionPvk: privateKey,
privateCert: privateKey,
cert: oktaPublicKey,
identifierFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress'
};
对于 OneLogin,我们使用-
var oneLoginStrategy = {
host: 'http://localhost:3000',
path: '/login/callback',
realm: 'urn:node:app',
entryPoint: "https://flow-dev.onelogin.com/trust/saml2/http-post/sso/686218",
issuer: "https://app.onelogin.com/saml/metadata/686218",
additionalParams: {
'RelayState': "test"
},
signatureAlgorithm: 'sha256',
decryptionPvk: privateKey,
privateCert: privateKey,
cert: oneLoginPublicKey,
validateInResponseTo: true,
identifierFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress'
};
但对于 Okta,它给出的错误是 "Cannot read property 'getAttribute' of undefined",而对于 OneLogin,它给出的错误是 "Invalid signature"。此外,我们调试了该模块,发现对于 Okta,它在查找算法时中断,而对于 OneLogin,它能够解密 'CipherData',但在验证签名时中断。
我们的私钥格式是-
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
请帮助我们解决这个问题。
这里的问题来自 Okta SAML 断言格式,我们对 xml-encryption 模块的 "decryptKeyInfo" 函数进行了更改,该模块在 passport-saml 下用于查找 "keyEncryptionMethod"断言。关于 OneLogin 这是我们的设置问题。
我们需要实施基于 SAML 的安全身份验证。我们的 IDP 将是 Okta 和 OneLogin。为此,我们在 node.js Express 应用程序中使用 "passport" + "passport-saml"。我们在 SP 端对 Okta-
使用以下策略配置var oktaLoginStrategy = {
host: 'http://localhost:3000',
path: '/login/callback',
realm: 'urn:node:app',
entryPoint: "https://dev-528399.oktapreview.com/app/builtiodev528399_oktasp1_1/exkbbi8vwj2OsHjbE0h7/sso/saml",
issuer: "http://www.okta.com/exkbbi8vwj2OsHjbE0h7",
additionalParams: {
'RelayState': "test"
},
signatureAlgorithm: 'sha256',
decryptionPvk: privateKey,
privateCert: privateKey,
cert: oktaPublicKey,
identifierFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress'
};
对于 OneLogin,我们使用-
var oneLoginStrategy = {
host: 'http://localhost:3000',
path: '/login/callback',
realm: 'urn:node:app',
entryPoint: "https://flow-dev.onelogin.com/trust/saml2/http-post/sso/686218",
issuer: "https://app.onelogin.com/saml/metadata/686218",
additionalParams: {
'RelayState': "test"
},
signatureAlgorithm: 'sha256',
decryptionPvk: privateKey,
privateCert: privateKey,
cert: oneLoginPublicKey,
validateInResponseTo: true,
identifierFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress'
};
但对于 Okta,它给出的错误是 "Cannot read property 'getAttribute' of undefined",而对于 OneLogin,它给出的错误是 "Invalid signature"。此外,我们调试了该模块,发现对于 Okta,它在查找算法时中断,而对于 OneLogin,它能够解密 'CipherData',但在验证签名时中断。
我们的私钥格式是-
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
请帮助我们解决这个问题。
这里的问题来自 Okta SAML 断言格式,我们对 xml-encryption 模块的 "decryptKeyInfo" 函数进行了更改,该模块在 passport-saml 下用于查找 "keyEncryptionMethod"断言。关于 OneLogin 这是我们的设置问题。