Проблема 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 это была наша проблема с настройкой.

Другие вопросы по тегам