Пользовательское приложение домена запрашивает разрешение на доступ к учетной записи Google

#google-app-engine #authentication #google-account

#google-app-engine #аутентификация #google-аккаунт

Вопрос:

Я ссылаюсь здесь на ту страницу, на которую вы перенаправляетесь после входа в GAE app со своей учетной записью Google, которая запрашивает ваше разрешение на доступ к вашей учетной записи Google.

Соедините это с пользовательским доменом и https, и вы получите мою проблему.

Извините за длинноту. Я искал везде. Ничего не найдено. Не уверен, что это проблема с OAuth (думаю, что нет).

Моя конфигурация:

  • разработано myapp.appspot.com
  • настроенный пользовательский домен myapp.mydomain.com чтобы указать на myapp
  • myapp использует службу входа GAE
  • необходимость в сообщениях https из пользовательского домена (!), решаемая следующим образом:
    • страница загружается по протоколу HTTP с http://myapp.mydomain.com
    • некоторые отправляемые URL-адреса HTTPS жестко закодированы на странице, как https://myapp.appspot.com/someservice
    • та же политика домена разрешена на стороне сервера с помощью http-заголовков
  • Служба входа GAE применяется как к http://myapp.mydomain.com обработчик И https://myapp.appspot.com/someservice обработчик

Рабочий процесс:

  1. пользователь еще не прошел проверку подлинности
  2. просмотр пользователя http://myapp.mydomain.com (не ssl)
  3. пользователь перенаправляется на страницу входа в учетную запись Google
  4. логины пользователей
  5. пользователь перенаправляется на вышеупомянутую страницу: myapp запрашивает разрешение на доступ к учетной записи Google пользователя
  6. пользователь предоставляет свое разрешение
  7. пользователь в порядке
  8. Теперь возникает проблема:
  9. пользователь отправляет https://myapp.appspot.com/someservice (так что данные передаются по протоколу ssl), который является loginrequired.
  10. вход в систему выполнен нормально, пользователь больше не перенаправляется на страницу входа,
    • Я думаю, это связано с тем, что вход в Google является перекрестным приложением (то же самое должно быть, если пользователь уже вошел в Gmail, скажем)
  11. но теперь https://myapp.appspot.com / снова запрашивает разрешение на доступ к учетной записи Google пользователя — и в этом проблема

Пользователю ДВАЖДЫ предлагается предоставить myapp разрешение на доступ к его учетной записи:

  • однажды, когда он просматривает http://myapp.mydomain.com
  • и еще один, когда он отправляет данные в https://myapp.appspot.com/someservice

Моему пользователю это не нравится, и мне тоже!!!

Я подозреваю, что это связано с тем, что ответ пользователя (Разрешить или нет, спасибо) сохраняется на стороне сервера в отношении URL-адреса приложения, а не в отношении какого-либо другого уникального идентификатора приложения.

Но я понятия не имею, как это решить или, по крайней мере, обойти.

Спасибо за ваше терпение при чтении до этого.

Любая помощь будет оценена.

Комментарии:

1. Какой SDK / язык и фреймворк вы используете?

Ответ №1:

Файл cookie, который выдается для сеанса пользователя, относится к домену и протоколу. В результате один и тот же сеанс не будет работать в приложении appspot и в вашем пользовательском домене. Это не ограничение App Engine — это просто то, как работает HTTP.

В настоящее время лучшим решением является размещение самой формы на HTTPS (что в целом является хорошей идеей в любом случае).

Комментарии:

1. Конечно, я хотел бы поместить саму форму на HTTPS. Но для этого мне нужен App Engine для поддержки SSL для пользовательских доменов… Есть новости об этом?

2. Редактировать: дело не в файлах cookie. Файлы cookie используются для сохранения информации для входа в систему, и они являются междоменными. Напротив, разрешение пользователя на доступ к учетной записи Google сохраняется на стороне сервера (я имею в виду, где-то на серверах Google), поскольку это можно проверить: 1 если вы удалите файлы cookie, ваш ответ «разрешить на 30 дней» остается действительным; 2 если вы ответите «разрешить на 30 дней» из Chromeответ по-прежнему действителен из firefox! Итак, указано, что эта информация («Разрешить в течение 30 дней») хранится на стороне сервера , это не вопрос файлов cookie, но оказывается, что это ограничение движка приложений…