Могу ли я использовать токен OAuth из бэкэнда в моем интерфейсе?

Я только что просмотрел описание примера Google DrEdit на Java (исходный код). Он показывает, как написать простое приложение для Диска и обрабатывает авторизацию в бэкэнде.

Это хороший пример, но самым большим недостатком, который я заметил, является тот факт, что пользователю необходимо снова войти в систему, когда он хочет выбрать файл со своего Диска (несмотря на то, что ранее это было разрешено приложению). Это неудобно, поэтому я хотел бы избежать этого. Выбор файла осуществляется с помощью Google Picker API, который доступен только в Javascript.

Следовательно, я хотел бы поделиться информацией об авторизации между моим бэкэндом и внешним интерфейсом — могу ли я просто передать токен OAuth, который у меня есть в бэкэнде, во внешний интерфейс? Если да, то есть ли рекомендуемый способ сделать это?


person Bartek    schedule 27.02.2014    source источник


Ответы (3)


Да, это совершенно нормально. Отслеживание клиента, как описано @tydotg, на самом деле не проблема, поскольку токен доступа так же поддается отслеживанию, независимо от того, был ли он сгенерирован на клиенте или на сервере.

Единственная реальная проблема заключается в том, чтобы убедиться, что вы загружаете токен только правильно аутентифицированному пользователю. Для этого можно использовать несколько схем, но, например:

  1. Пользователь аутентифицируется в вашем приложении с помощью OAuth на основе сервера.
  2. Сервер хранит идентификатор пользователя или адрес электронной почты в переменной сеанса.
  3. Когда ваш клиент запрашивает токен, вы используете пользователя сеанса для создания токена.
person pinoyyid    schedule 27.02.2014
comment
Ладно, я так и подозревал, спасибо. Просто чтобы убедиться, что я понял: когда я узнаю, что у меня нет действительного токена в моем интерфейсе, я вызываю серверную часть, которая либо возвращает действительный токен, либо запрашивает новый, а затем возвращает его во внешний интерфейс? - person Bartek; 27.02.2014
comment
Да. Просто будьте осторожны с просроченными сессиями - person pinoyyid; 06.03.2014

Используйте перекрестную идентичность для достижения этого:

https://developers.google.com/accounts/docs/CrossClientAuth

person Jay Lee    schedule 27.02.2014
comment
Я прочитал его и понял: я должен реализовать поток OAuth как в своем интерфейсе, так и в бэкэнде, и если приложение уже авторизовано, оно получит токен доступа без запроса пользователя. Это правильно? - person Bartek; 27.02.2014
comment
В моем сценарии пользователь всегда должен сначала авторизоваться в бэкэнде, поэтому ответ пинойида — это тот, который я искал. Но это хорошая альтернатива. Однако у него есть недостаток — всплывающее окно, которое появляется на очень короткое время. - person Bartek; 02.03.2014

Я уверен, что вы можете (я не слишком хорошо знаком с Java, но, например, в Rails это было бы легко), однако причина, по которой вы не хотите этого делать, заключается в безопасности.

Все на стороне сервера довольно безопасно и недоступно для клиента. Однако все, что происходит на стороне клиента, является честной игрой. Я мог проверить элемент, и если бы я знал, что ищу, я мог бы получить токен OAuth.

person tydotg    schedule 27.02.2014