2013-06-23 20 views
5

I zdefiniowane przy użyciu prostego API Cloud Endpoints Google:Korzystanie Auth z punktami końcowymi

@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()); 
    } 

} 

Potem spróbuj przetestować go przy użyciu API explorer. Aktywowałem OAuth 2.0. Ale gdy wykonuję żądanie, obiekt User to 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) 

Odpowiedz

2

Komunikat getCurrentUser: clientId not allowed wskazuje, że identyfikator klienta związane z tokena jest pusty. To nie wydaje się możliwe i może być dziwnym błędem/dziwactwem.

Należy sprawdzić token wysyłany w żądaniu, to będzie w sekcji Request w coś jak

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

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

i token jest ten, który zaczyna się od ya29.. Należy upewnić się, token informacji sprawdza się poprzez wysłanie go do tokeninfo API:

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

Dostałem mój znak, a następnie przekazał go do 'oauth2.tokeninfo'. Odpowiedź to "200" z poprawnym adresem e-mail. Część "published_to" odpowiada identyfikatorowi clientId 'com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID'. – Sydney

+1

Interesujące, wydaje się, że może to być błąd. Czy to zachowanie ma miejsce w programie produkcyjnym lub programach typu "dev appserver"? Czy jest spójny czy przerywany? – bossylobster

+0

Jest tylko na programach od deweloperów, ponieważ nie wdrożyłem mojej aplikacji na silniku aplikacji. Jest spójny, mogę powtarzać cały czas. Czy powinienem utworzyć bilet w narzędziu do śledzenia problemów z aparatem? Czy masz jakiś pomysł na to, co mogę sprawdzić, aby sprawdzić, czy to naprawdę błąd. Nie wiem, czy jest to powiązane, ale stworzyłem prosty test za pomocą 'LocalServiceTestHelper' i zawsze zwraca' null' podczas wywoływania 'userService.getCurrentUser()'. Kod to 'LocalServiceTestHelper helper = new LocalServiceTestHelper (new LocalUserServiceTestConfig()) .setEnvIsAdmin (true) .setEnvIsLoggedIn (true);' – Sydney

Powiązane problemy