Express と ejs を使用して Web アプリケーションをセットアップしており、SAML 認証を統合する必要があります。私は、metadata.xml、公開証明書、秘密鍵を持っています。次に、この戦略を設定して認証に使用します。Passport-saml-metadata というモジュールを使用しようとしましたが、認証しようとすると、エラー: 不明な認証戦略 "saml" と表示されますが、動作する他の戦略と同じファイル内で定義およびエクスポートされます。
最初に、passport-saml モジュールを使用して 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'));
saml と同じファイルで定義されている oauth2 のように、passport によって戦略が認識されることを期待しています。両方のファイルがエクスポートされ、実行中にエラーが表示されないため (戦略が見つからないことを除けば)、少なくとも auth が呼び出され、エラーを見つけることができると期待しています。