9

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 が呼び出され、エラーを見つけることができると期待しています。

4

1 に答える 1