У нас была похожая проблема в одном из наших проектов.В итоге мы использовали следующий метод передачи токена:
1) Свежий клиент подключается к серверу и получает токен, действительный в течение x раз.
2) Клиент имеетзапутанная часть кода, которая использует алгоритм для изменения токена (и этот алгоритм изменяется с некоторой частотой синхронно с сервером).Клиент использует алгоритм для изменения токена и включает его в следующий запрос к серверу.
3) Сервер знает исходный токен и алгоритм, поэтому теперь он может проверить, действителен ли новый токени это от действительного клиента.
4) Цикл продолжается.
Это не на 100% безопасно, так как кто-то действительно может потратить время и проанализировать общение и в конечном итоге понять схему, но выможет так много поиграться с алгоритмом и изменить его достаточно часто, чтобы кому-то было трудно его угадать.
Надеюсь, это поможет.
PS Приложение, о котором я говорю, используетэто было в производстве в течение прошлых 5 лет и получает ~ 300 000 уникальных пользователей в день, и никто еще не взломал.