Паспорт + SAML с файлом metadata.xml - PullRequest
0 голосов
/ 07 июня 2019

Я настраиваю веб-приложение с экспресс и ejs и мне нужно интегрировать аутентификацию SAML.У меня есть metadata.xml, открытый сертификат и закрытый ключ.Теперь я хочу настроить эту стратегию и использовать ее для аутентификации.Я пытался использовать модуль с именем passport-saml-metadata, но всякий раз, когда я пытаюсь аутентифицироваться, он говорит: Ошибка: неизвестная стратегия аутентификации "saml", хотя она определена и экспортирована в том же файле, что и другие стратегии, которые работают.

Сначала я попытался вручную настроить SAML с помощью модуля passport-saml, но затем я заметил, что это - passport-saml-metadata, который может обрабатывать мой файл метаданных и строить стратегию, поэтому я решил использовать этот.Теперь у меня есть «действительный» (он не жалуется в любой момент при исполнении), но строгость не обнаруживается, когда я вызываю маршрут.Другие стратегии в этом же файле распознаются и работают без проблем.

настройка паспорта:

// Read the metadata
const reader = new MetadataReader(
    fs.readFileSync(path.join(__dirname, './metadata.xml'), 'utf8')
);
const ipConfig = toPassportConfig(reader);

const spPublicCertificate = path.join(__dirname, './server.crt');
    const spPrivateKey = path.join(__dirname, './private_key.pem');

    const spConfig = {
        callbackUrl: `http://localhost:3300/auth/saml/sso/callback`,
        logoutCallbackUrl: `http://localhost:3300/auth/saml/slo/callback`,
        issuer: '/shibboleth',
        privateCert: spPrivateKey
    };

    const strategyConfig = {
        ...ipConfig,
        ...spConfig,
        validateInResponseTo: false,
        disableRequestedAuthnContext: true,
    };

    const verifyProfile = (profile, done) => {
        return done(null, { ...profile, test: 'xxx' });
    };
const samlStrategy = new saml.Strategy(strategyConfig, verifyProfile);
    passport.use(samlStrategy);

вызов в app.js

// Login Oauth
router.get('/okta', passport.authenticate('oauth2'));

// Login SAML
router.get('/saml', passport.authenticate('saml'));

Я ожидаю, чтоСтратегия распознается по паспорту как oauth2, который определен в том же файле, что и saml.Поскольку оба файла экспортируются и во время выполнения не отображается ошибка (кроме того, что стратегия не может быть найдена), я ожидаю, что по крайней мере она вызовет аутентификацию и что я могу обнаружить любую ошибку.

1 Ответ

0 голосов
/ 07 июня 2019

Просто нужно было установить passport.use(samlStrategy); на passport.use('saml',samlStrategy);

, потому что иначе он не распознал бы стратегию ...

Извините за вопрос

...