Я настраиваю веб-приложение с экспресс и 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.Поскольку оба файла экспортируются и во время выполнения не отображается ошибка (кроме того, что стратегия не может быть найдена), я ожидаю, что по крайней мере она вызовет аутентификацию и что я могу обнаружить любую ошибку.