リターンURL(例えば、 "/ページ/保護されたが、")でラウンドトリップすることができ:
1)認証ミドルウェアはアズールADのB2Cにリダイレクトする前に、 "customState" パラメータを設定:
app.get('/login', function (req, res, next) {
passport.authenticate('azuread-openidconnect', {
response: res,
resourceURL: config.resourceURL,
customState: '/page/protected', // Or set to the current URL
failureRedirect: '/'
})(req, res, next);
}, function (req, res) {
res.redirect('/');
});
2)認証ミドルウェアはアズールADのB2Cからの認証応答を検証した後、req.body.state
パラメータを取得する:
app.post('/auth/openid/return', function (req, res, next) {
passport.authenticate('azuread-openidconnect', {
response: res,
failureRedirect: '/'
})(req, res, next);
}, function (req, res) {
res.redirect(req.body.state);
});
「customState」パラメータの値を暗号化する必要があります。返されるURLを改ざんしたくない場合は、req.body.state
パラメータを復号化する必要があります。
認証ミドルウェアを受け取った後それ以外の場合は、認証ミドルウェアは、AzureのAD B2Cに認証要求をリダイレクトし、送信する前req.session
に戻りURLを記述した後、読み(そして削除)するreq.session
からこの戻りURL共通であり、 Azure AD B2Cからの認証応答を検証します。
私はこれも見つけましたが、ユーザーが実際にログインしない限り、セッションを開始しない方がよいと思います。 – Thomas
こんにちは@トーマス。上記の答えを、「状態」パラメータを使用してリターンURLをラウンドトリップできる方法で更新しました。 –
ありがとう!私のコードには何らかの形で返された状態が混乱していた(または実際のb2cリクエストに自分の状態文字列が追加されていない)「何か」がありました。私のコードを整理し、あなたの例を使って私はそれを働かせることができました。感謝万円! – Thomas