У меня есть домен: example.com и поддомен: api.example.com.
В моем внешнем приложении example.com я храню токен в localStoarge. мое приложение знает о пользователе и токене из базы localStorage на моем logi c для чтения из localStoage.
Я также хочу выполнить авторизацию facebook. поэтому в моем приложении, когда я нажимаю «войти с помощью facebook», я перенаправляю на свой маршрут api.example.com/login/facebook:
access.get('/login/facebook', (req, res, next) => passport.authenticate('facebook', { session: false, scope: ['email'], authType: 'rerequest' })(req, res, next));
и перенаправляю facebook обратно на URL-адрес обратного вызова:
access.get('/login/facebook/cb', (req, res, next) => {
passport.authenticate('facebook', (err, fromStrategy) => {
...
const token = generateToken(..);
const encrptToken = makeTokenSecureAndEncrpt(token);
const html = `<html><script>localStoage.setItem('t', encrptToken);location = '/';</script></html>`;
res.send(html);
})(req, res, next);
});
Мне нужно выполнить localStoage в домене example.com. не в api.example.com.
Почему? потому что каждый домен и субдомен имеют свой собственный доступ к localStorage.
Я пытаюсь использовать cross-storage , но из-за ограничений это не работает. safari создает песочницу localStorage, чтобы она не влияла на другие домены.
Я пытаюсь перезаписать, когда я обращаюсь к example.com/api/login/facebook/cb, я перезаписываю api.example.com/login / facebook / cb - таким образом пользователь останется на домене example.com. но passport.authenticate
в /login/facebook/cb
ответил перенаправлением 302 обратно на facebook. Я думаю, это потому, что другой субдомен.
Последний способ, который мне оставалось сделать - я думаю, проблема заключается в том, чтобы открыть страницу в example.com/token и перенаправить на example.com на какой-то страница с токеном в строке запроса. таким образом токен становится доступным для кражи.
Интересно, распространен ли этот способ, и, может быть, есть другой безопасный способ сделать это?