#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 обработчик
Рабочий процесс:
- пользователь еще не прошел проверку подлинности
- просмотр пользователя http://myapp.mydomain.com (не ssl)
- пользователь перенаправляется на страницу входа в учетную запись Google
- логины пользователей
- пользователь перенаправляется на вышеупомянутую страницу: myapp запрашивает разрешение на доступ к учетной записи Google пользователя
- пользователь предоставляет свое разрешение
- пользователь в порядке
- Теперь возникает проблема:
- пользователь отправляет https://myapp.appspot.com/someservice (так что данные передаются по протоколу ssl), который является loginrequired.
- вход в систему выполнен нормально, пользователь больше не перенаправляется на страницу входа,
- Я думаю, это связано с тем, что вход в Google является перекрестным приложением (то же самое должно быть, если пользователь уже вошел в Gmail, скажем)
- но теперь 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, но оказывается, что это ограничение движка приложений…