2013-06-23 4 views
5

я определил простой API с помощью Google Cloud Endpoints:Использование Auth с Endpoints

@Api(name = "realestate", version = "v1", clientIds = { com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID }, scopes = { 
     "https://www.googleapis.com/auth/userinfo.email", 
     "https://www.googleapis.com/auth/userinfo.profile" }) 
public class RealEstatePropertyV1 { 

    @ApiMethod(name = "create", path = "properties", httpMethod = HttpMethod.POST) 
    public void create(RealEstateProperty property, User user) 
      throws UnauthorizedException { 
     if (user == null) { 
      throw new UnauthorizedException("Must log in"); 
     } 
     System.out.println(user.getEmail()); 
    } 

} 

Тогда я пытаюсь проверить его с помощью API explorer. Я активировал OAuth 2.0. Но когда я выполняю запрос, объект User - null.

Jun 23, 2013 10:21:50 AM com.google.appengine.tools.development.DevAppServerImpl start 
INFO: Dev App Server is now running 
Jun 23, 2013 10:22:42 AM com.google.api.server.spi.SystemServiceServlet init 
INFO: SPI restricted: true 
Jun 23, 2013 10:22:43 AM com.google.api.server.spi.WebApisUserService getCurrentUser 
WARNING: getCurrentUser: clientId not allowed 
Jun 23, 2013 10:22:43 AM com.google.api.server.spi.SystemService invokeServiceMethod 
INFO: cause={0} 
com.google.api.server.spi.response.UnauthorizedException: Must log in 
    at com.realestate.api.v1.RealEstatePropertyV1.create(RealEstatePropertyV1.java:44) 

ответ

2

Сообщение getCurrentUser: clientId not allowed указывает, что идентификатор клиента, связанный с маркером является пустая строка. Это не кажется возможным и может быть странной ошибкой/причудой.

Вы должны проверить маркер посланный в запросе, то он будет в разделе Request в чем-то вроде

GET https://www.googleapis.com/oauth2/v2/userinfo?key={YOUR_API_KEY} 

Authorization: Bearer ya29.... 
X-JavaScript-User-Agent: Google APIs Explorer 

и ваш маркер является тот, который начинается с ya29.. Вы должны убедиться, что информация о токенах проверена, отправив ее в API tokeninfo:

https://developers.google.com/apis-explorer/#p/oauth2/v2/oauth2.tokeninfo 
+0

Я получил свой токен, а затем передал его в 'oauth2.tokeninfo'. Ответ «200» с моим правильным адресом электронной почты. Часть 'issu_to' соответствует clientId' com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID'. – Sydney

+1

Интересно, это похоже, что это может быть ошибка. Это поведение происходит на производстве или на сервере приложений? Является ли он последовательным или прерывистым? – bossylobster

+0

Это только на dev appserver, так как я не развертывал свое приложение в приложении. Это согласуется, я могу воспроизводить все время. Должен ли я создать билет в трекере по проблеме с движком приложений? Или вы знаете, что я могу проверить, действительно ли это ошибка. Я не знаю, связано ли это, но я создал простой тест с использованием 'LocalServiceTestHelper' и всегда возвращает' null' при вызове 'userService.getCurrentUser()'. Код: 'LocalServiceTestHelper helper = new LocalServiceTestHelper (new LocalUserServiceTestConfig()). SetEnvIsAdmin (true) .setEnvIsLoggedIn (true);' – Sydney