v0.5.173: OIDC state всегда, CSRF смонтирован, session.regenerate
This commit is contained in:
+9
-8
@@ -32,15 +32,11 @@ function createRouter({ auth, doubleCsrfProtection, generateCsrfToken, authLimit
|
||||
router.get('/callback', async (req, res) => {
|
||||
const { code, state } = req.query;
|
||||
|
||||
// Проверка state — защита от CSRF в OAuth-потоке
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
if (req.session) delete req.session.oidcState;
|
||||
} else {
|
||||
if (!state || state !== req.session.oidcState) {
|
||||
return res.status(403).send('Invalid state parameter');
|
||||
}
|
||||
delete req.session.oidcState;
|
||||
// Проверка state — защита от CSRF в OAuth-потоке (всегда)
|
||||
if (!state || state !== req.session.oidcState) {
|
||||
return res.status(403).send('Invalid state parameter');
|
||||
}
|
||||
delete req.session.oidcState;
|
||||
|
||||
if (!code) {
|
||||
return res.status(400).send('Missing authorization code');
|
||||
@@ -57,6 +53,11 @@ function createRouter({ auth, doubleCsrfProtection, generateCsrfToken, authLimit
|
||||
const payload = jwt.decode(accessToken);
|
||||
if (!payload) throw new Error('Failed to decode token');
|
||||
|
||||
// Регенерируем ID сессии — защита от session fixation
|
||||
await new Promise((resolve, reject) => {
|
||||
req.session.regenerate(err => err ? reject(err) : resolve());
|
||||
});
|
||||
|
||||
req.session.token = accessToken;
|
||||
req.session.idToken = tokenData.idToken || null;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user