Я работаю над API Java, который функционирует как API конечной точки, и над производством.
он работает на облачной платформе Google. Методы API вызываются передачей токена Firebase как части URL-адреса, и этот токен используется для создания User
, доступного внутри метода API:
@ApiMethod(path = "myPath/{tokenId}/doSomething", httpMethod = "get")
public ResponseMessage ReturnSomething(@Named("tokenId") String tokenId, User user) throws UnauthorizedException, BadRequestException, InternalServerErrorException, FirebaseAuthException
{
if (user == null)
...
В работе, когда URL вызывается из приложения Angular на Firebase, которое передает токен в URL, user
создается правильно. Я не совсем понимаю, как User
создается из токена, я только знаю, что это как-то происходит «автоматически» в рамках интеграции Firebase с Google Cloud.
Я хочу отладить API локально, используя Debug As> App Engine изнутри Eclipse. Однако, когда я делаю это и вызываю API из моего локального приложения Angular, работающего с использованием Firebase serve, токен правильно передается моему локально работающему API, однако user
всегда null
.
@ApiMethod(path = "myPath/{tokenId}/doSomething", httpMethod = "get")
public ResponseMessage ReturnSomething(@Named("tokenId") String tokenId, User user) throws UnauthorizedException, BadRequestException, InternalServerErrorException, FirebaseAuthException
{
if (user == null)
// this is always null
Я подозреваю, что это проблема с моим локально работающим Java API, правильно проходящим аутентификацию в Firebase. Я посмотрел на это руководство , в котором говорится, что для свойства GOOGLE_APPLICATION_CREDENTIALS
в Windows необходимо указать путь к ключу JSON учетной записи службы App Engine по умолчанию, что является нормальным способом гарантировать, что локальный доступ предоставляется ресурсам Google Cloud (и предположительно Firebase).
Я добавил это явно (я все равно уже запускал gcloud auth application-default login
, используя командную строку), однако он все еще не работает. Я просто получаю null
за user
, и нет никаких признаков того, что происходит. Я не хочу проводить программную аутентификацию, поскольку это означает изменение кода API для другой аутентификации во время отладки. Как получить User
при локальной отладке как App Engine?
UPDATE
Я понял, что хотя tokenId
в URL присутствует, я получаю следующую ошибку при вызове API:
WARNING: Authentication failed: com.google.api.auth.UnauthenticatedException: No auth token is contained in the HTTP request
Значение tokenId
в приведенном ниже коде является допустимым значением, поэтому я не уверен, почему я получаю это сообщение:
@ApiMethod(path = "myPath/{tokenId}/doSomething", httpMethod = "get")
public ResponseMessage ReturnSomething(@Named("tokenId") String tokenId, User user)