Проблема passport-saml для декодирования и проверки подписанного ответа SAML
Нам необходимо реализовать безопасную аутентификацию на основе SAML. Нашим ВПЛ будут Okta и OneLogin. Для этого мы используем "passport" + "passport-saml" в нашем приложении node.js express. Мы используем следующую конфигурацию стратегии на стороне 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 это выдает ошибку как "Не удается прочитать свойство 'getAttribute' undefined", а для OneLogin это выдает ошибку как "Недопустимая подпись". Кроме того, мы отладили модуль и обнаружили, что для Okta он ломается при поиске алгоритма, а для OneLogin он может расшифровать "CipherData", но он ломается при проверке подписи.
Наш формат закрытого ключа
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
Пожалуйста, помогите нам в этом.
1 ответ
Здесь проблема связана с форматом подтверждения Okta SAML, мы внесли изменения в функцию "decryptKeyInfo" модуля xml-шифрования, которая используется в passport-saml для поиска "keyEncryptionMethod" из утверждения. О OneLogin это была наша проблема с настройкой.