При реализации потока кода авторизации в обычном веб-приложении разрешается сохранять параметр состояния в файлах cookie. См. здесь и [здесь] (https://auth0.com/docs/protocols/oauth2/mitigate-csrf-attacks)
Почему сохранение состояния (иначе говоря, nonce) в поваре ie является приемлемым решением? Например, если мы сделаем это в nodejs, код будет выглядеть примерно так:
app.use('/login', (_req, res) => {
state = randomString(32)
const authorizationEndpointUrl = new URL(`${activeConfig.authorization.domain}/authorize`);
authorizationEndpointUrl.search = new URLSearchParams({
audience: activeConfig.authorization.audience,
response_type: 'code',
redirect_uri: 'http://localhost:8443/callback',
client_id: activeConfig.authorization.clientId,
scope: activeConfig.authorization.scope,
state,
}).toString();
res.cookie('state', state, { httpOnly: true }); // cookie set here
res.redirect(authorizationEndpointUrl.toString());
});
app.use('/callback', req => {
// check that url state matches req.cookie.state???
})
Но если мы это сделаем, то, что мешает злоумышленнику просто установить такое же «поддельное» состояние в ответе URL и готовить ie? Что мне здесь не хватает?