Как войти в систему через facebook через домены? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть домен: 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 на какой-то страница с токеном в строке запроса. таким образом токен становится доступным для кражи.

Интересно, распространен ли этот способ, и, может быть, есть другой безопасный способ сделать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...