title: Google Endpoints API + Chrome Extension returns None for endpoints.get_current_user().user_id()
body: <p>I am developing Google App Engine application written in Python and using Endpoints API. In conjunction, I am writing a Chrome Extension to interact with the Endpoints API. I've been running into lots of issues with the Endpoints API and authorization. Currently, here is my setup:</p>
  
  <h2>Endpoints API (Python)</h2>
  
  <pre><code>from google.appengine.ext import endpoints
  from protorpc import message_types
  from protorpc import remote
  
  ALLOWED_CLIENT_IDS = ['client_id_from_google_api_console',
                        endpoints.API_EXPLORER_CLIENT_ID]
  
  @endpoints.api(name='my_api',version='v1', description='My API',
                 allowed_client_ids=ALLOWED_CLIENT_IDS)
  class MyApi(remote.Service):
  
      @endpoints.method(message_types.VoidMessage, DeviceListResponse,
                        name='user.device.list', path='user/device/list', 
                        http_method='GET')
      def user_device_list(self, request):
          current_user = endpoints.get_current_user()
          if current_user is None:
              raise endpoints.UnauthorizedException('You must authenticate first.')
          if current_user.user_id() is None:
              raise endpoints.NotFoundException("Your user id was not found.")
  
          return DeviceListResponse(devices=[]) #Hypothetically return devices
  
  api_service = endpoints.api_server([MyApi], restricted=False)
  </code></pre>
  
  <h2>Google API Console</h2>
  
  <p>The JS origins include:
  chrome-extensions://chrome_app_id</p>
  
  <h2>CHROME EXTENSION (JS)</h2>
  
  <pre><code>var apiRoot = "https://my_app_id.appspot.com/_ah/api";
  var clientID = "client_id_from_google_api_console";
  var oauthScopes = ["https://www.googleapis.com/auth/userinfo.email"];
  var responseType = "token id_token";
  
  //Helper method to log to the console
  function l(o){console.log(o);}
  
  function oauthSignin(mode) {
      gapi.auth.authorize({client_id: clientID, scope: oauthScopes,
      immediate: mode, response_type: responseType}, function() {
          var request = gapi.client.oauth2.userinfo.get();
          request.execute(function(resp) {
              authenticated = !resp.code;
              if(authenticated) {
                  var token = gapi.auth.getToken();
                  token.access_token = token.id_token;
                  gapi.auth.setToken(token);
                  l("Successfully authenticated. Loading device list");
                  gapi.client.my_api.user.device.list({}).execute(function(resp) {
                      if(resp.code) {
                          l("Response from device list: " + resp.message);
                      }
                      l(resp);
                  });
              }
          });
      });
  }
  
  
  //This get's called when the page and js library has loaded.
  function jsClientLoad() {
      l("JS Client Libary loaded. Now loading my_api and oauth2 APIs.");
      var apisToLoad;
      var callback = function() {
          if (--apisToLoad == 0) {
              l("APIs have loaded.")
              oauthSignin(true);
          } else {
              l("Waiting for " + apisToLoad + " API" + (apisToLoad&gt;1?"s":"") + " to load.");
          }
      }
  
      apisToLoad = 2; // must match number of calls to gapi.client.load()
      gapi.client.load('my_api', 'v1', callback, apiRoot);
      gapi.client.load('oauth2', 'v2', callback);
  }
  </code></pre>
  
  <h2>Result</h2>
  
  <p>Now that I have shown the main chunk of my code (note, I had to change it a bit to make sense without uploading entire code), if I go to the Google API Explorer and run that method, I get a 200 response. If I run it in the Chrome Extension, I get a 404 code with the message "Your user id was not found.".</p>