Login do Google+ para aplicativos do servidor, trocando código de autenticação por token de acesso

Estou tentando seguir esse fluxo para entrar em um usuário em um aplicativo Android usando um back-end do servidor python:

https://developers.google.com/+/web/signin/server-side-flow

Consegui obter o código de autorização do aplicativo Android, mas quando tento trocar esse código por um token de acesso do servidor, estou recebendo um erro "invalid_request".

No aplicativo Android, estou usando o mesmo client_id do servidor listado em "ID do cliente para aplicativo da web" no meu console. Eu verifiquei que o redirect_uri está correto. Não é possível gerar um código de autorização de um cliente Android e usar um servidor para trocar pelo token de acesso?

Meu código python é:

def auth_params(self):
  client_id, client_secret = self.get_key_and_secret()
  return {
      'grant_type': 'authorization_code',    
      'code': self.data.get('code', ''),  # auth code from app
      'client_id': client_id,
      'client_secret': client_secret,
      'redirect_uri': self.get_redirect_uri()
  }       

@classmethod
def auth_headers(cls):
    return {'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'application/json'}

def auth_complete(self, *args, **kwargs):
  params = self.auth_params()
  request = Request('https://accounts.google.com/o/oauth2/token', data=urlencode(params),
                    headers=self.auth_headers())
  try:
      response = simplejson.loads(urlopen(request).read())
  except HTTPError, e:
      print 'fml'

questionAnswers(1)

yourAnswerToTheQuestion