我们可以在同一个应用程序中为OIDCStrategy制定多个策略。 我有一个需要通过身份验证的应用程序 通过App1(ClientID1)或通过App2(ClientId2)。
使用passport-azure-ad OIDCStrategy时,我总是只通过其中一个进行身份验证。
以下是路线:
app.get('/login1',
passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }),
....
});
app.post('/auth/openid/return1',
passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }),
function(req, res) {
...
});
app.get('/login2',
passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }),
....
});
app.post('/auth/openid/return2',
passport.authenticate('azuread-openidconnect', { failureRedirect: '/' }),
function(req, res) {
...
});
以下是配置的策略。
passport.use(new OIDCStrategy({
clientID: config.creds.clientID1,
redirectUrl: config.creds.redirectUrl1,
clientSecret: config.creds.clientSecret1,
...
});
passport.use(new OIDCStrategy({
clientID: config.creds.clientID2,
redirectUrl: config.creds.redirectUrl2,
clientSecret: config.creds.clientSecret2,
...
});
更新:passport-azure-ad不支持此功能。 通过深入验证。当我们添加新策略时,它实际上将关键“azuread-openidconnect”添加到策略中 当我们添加另一个时,它会覆盖现有的那个。
passport._strategies['azuread-openidconnect']
说,它将使用最新的一个。
我们是否有针对我的场景的解决方案,其中应用程序需要通过多个AAD应用程序进行身份验证。 ?
到目前为止的解决方案是:我们应该注册一个多租户AAD应用程序并将租户限制在我们想要的范围内。
答案 0 :(得分:2)
您可以创建两个策略并覆盖其名称,然后在passport.authenticate中指定策略。这种方法对我有用。
var strategy1 = new OIDCStrategy(...);
strategy1.name = "strategy1";
var strategy2 = new OIDCStrategy(...);
strategy2.name = "strategy2";
passport.use('strategy1');
passport.use('strategy2');
app.get('/login1', passport.authenticate('strategy1', ...));
app.post('/auth/openid/return1', passport.authenticate('strategy1', ...));
app.get('/login2', passport.authenticate('strategy2', ...));
app.post('/auth/openid/return2', passport.authenticate('strategy2', ...));