2013-09-20 2 views
2

Я следил за сообщением в блоге. Проверка обратных вызовов из Android-приложений (http://android-developers.blogspot.tw/2013/01/verifying-back-end-calls-from-android.html) для проверки токенов, отправленных клиентами Android на Java.Google ID-токен checker для Java check() return null

Я использую образец кода в сообщении блога с Google Client Library для Java (http://code.google.com/p/google-api-java-client/downloads/detail?name=google-api-java-client-1.17.0-rc.zip&can=2&q=).

Однако метод GoogleIdToken.Payload check(String tokenString) в образце кода иногда возвращает значение null. Это очень раздражает, потому что я хотел бы использовать payload.getAudience() и payload.getAuthorizedParty(), чтобы предотвратить спуфинг. Если полезная нагрузка равна нулю, возникает NullPointerException.

Как мы можем решить проблему?

ответ

1

Я предполагаю, что у вас есть попытка/уловка и проверили, что вы не получаете исключение из вызова verify()?

Предполагая, что возврат null означает, что он не удалось проверить. Причины этого могут быть следующими:

  • Вы не в сети; код не может получить сертификат Google для проверки подписи
  • Срок действия токена истек; их жизни, как правило, только через час
  • как-то маркер был изменен не так подпись больше не действительна

Если у вас есть маркер, который вы действительно уверены, должны быть действительными, но проверить() вызов еще возвращает null, а затем записывает ошибку.

+0

Извините, но я не понимаю о предположении try/catch. Я использую следующий код для использования класса Checker в примере кода: \t Checker checker = new Checker (новый String [] {clientID}, аудитория); \t Полезная нагрузка полезной нагрузки = checker.check (токен); \t System.out.println (payload.getAudience()); // NPE Должен ли я окружать этот код с помощью try/catch? – Greenhand

+1

Возможно, вы захотите попробовать. Нажмите https://www.googleapis.com/oauth2/v1/tokeninfo?access_token= <ваш-токен-здесь> и проверьте, действительно ли ваш токен. Если это так, но check() все равно возвращает null, определенно ошибка –

+0

После попытки, я обнаружил, что передаю неправильный идентификатор клиента в Checker. Токен действителен, но check() возвращает null, потому что я передаю неверный идентификатор клиента. Работает ли она по назначению или это ошибка? Если он работает по назначению, я надеюсь, что он может дать более конкретное сообщение. – Greenhand

0

В моем случае null был вызван issue внутри библиотеки. Описание: Эмитент был «accounts.google.com», но в ответ я получил «https://accounts.google.com». Решение: я вручную изменил эмитент, и это поможет.

Проблема уже исправлена, но не в версии выпуска, по крайней мере, в момент моего ответа.