токен канала gae как токен общего доступа

У меня есть приложение для Android, которое взаимодействует через канал и REST с сервером GAE. Могу ли я использовать токен канала в качестве токена общего доступа, например:

  1. клиент предоставляет учетные данные сервлету
  2. сервлет создает канал и предоставляет токен
  3. клиент выполняет вызовы REST, предоставляя токен канала в качестве токена доступа
  4. другая связь через канал

Для 3 я хотел бы остаться бесплатным сеансом. Поэтому мне нужно будет расшифровать идентификатор клиента из токена канала. Идентификатор клиента, вероятно, зашифрован в токене, но я не нашел ни одного вызова API для его извлечения.

Есть ли какой-либо другой доступный API для получения идентификатора клиента для токена канала?

В противном случае мне нужно было бы поддерживать сопоставление токена канала и идентификатора клиента, что снижает ценность токена. Будет ли memcache подходящим механизмом для поддержания этого сопоставления?

Спасибо


person user2583621    schedule 29.07.2013    source источник


Ответы (1)


Это интересная концепция. Это может сработать, если вы будете осторожны.

Во-первых, это будет безопасно, только если вы передаете свой токен через HTTPS.

Срок действия токенов и каналов истекает, поэтому вам приходится время от времени заново создавать свой канал.

Каналы немного глючат из-за плохого интернет-соединения. Если вы потеряете подключение к Интернету, иногда канал все еще работает после этого, иногда вам нужно его воссоздать.

Невозможно проверить или получить идентификатор клиента с помощью токена доступа. Таким образом, чтобы использовать это в качестве безопасности, вам нужно НЕ возвращать какие-либо данные в исходный запрос, а просто отправлять данные в канал. Кроме того, вам потребуется сохранить собственное сопоставление между идентификатором клиента и токеном доступа на сервере. И имейте в виду, что это было бы неточно, поскольку на стороне сервера трудно определить, истек ли срок действия токена. В большинстве ситуаций, если вам действительно нужны данные, memcache сам по себе не является подходящим механизмом, вы захотите, чтобы он поддерживался хранилищем данных на случай сброса memcache.

Я думаю, что самая большая проблема заключается в том, что вам нужно будет вручную связать ваши запросы на вызовы REST с данными, которые вы получите позже на канале. Вы, вероятно, можете сделать это достаточно легко с помощью инкрементного счетчика в качестве идентификатора, но вам придется обрабатывать случаи, когда вы не получаете ответ и должны повторить попытку и т. д. Возможно, есть более простые способы, если вы используете идентификатор сеанса.

person dragonx    schedule 29.07.2013
comment
Спасибо за ваш ответ. Конечно, все коммуникации будут только через SSL. Почему я не должен использовать ответ HTTP для вызовов REST? Сервлет знает, кто запросил, и может ответить напрямую. Просто было бы проще всего прочитать идентификатор клиента непосредственно из токена, так как в большинстве других токенов он закодирован. Memcache является временным, как и токены и каналы. Поэтому, если какой-либо из них отсутствует, клиенту необходимо запросить новый канал. - person user2583621; 01.08.2013