AttributeError: 'module' object has no attribute 'SignedJwtAssertionCredentials'

I had the same problem and also I did not have pyOpenSSL installed which is required when using from_p12_keyfile().

from_p12_keyfile()

Raises:
NotImplementedError if pyOpenSSL is not installed / not the active crypto library.

I read the JSON file into dictionary and passed it to from_json_keyfile_dict() like this:

import json
from oauth2client.service_account import ServiceAccountCredentials
# other imports and code from sample...

# modified authentication part
data = {}
with open('api.json') as json_file:
  data = json.load(json_file)
credentials = ServiceAccountCredentials.from_json_keyfile_dict(
    data,
    scopes=['https://www.googleapis.com/auth/androidpublisher']
)
http = httplib2.Http()
http = credentials.authorize(http)
# do what ever you want with the returned object

api.json file refers to the file which gets created when service account is created.

Of course there is also couple other functions to get the credentials but this solution helped me to get the stuff working. Maybe this will help someone in future.

Reference: Oauth2Client.service_account


Finally after so many days, I was able to find answer to it. It turns out that the class SignedJwtAssertionCredentials was removed from the oath2client python package in the 2.0.0 update. It was no more under oauth2client.client. The behaviour has been moved onto oauth2client.service_account.ServiceAccountCredentials.

Following worked for me:

import argparse

from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials

import httplib2
from oauth2client import client

SERVICE_ACCOUNT_EMAIL = ('myaccountemail.com')

# Declare command-line flags.
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('package_name',
                   help='The package name. Example: com.android.sample')

def main():
  key='mykeyname.p12'
  scope = 'https://www.googleapis.com/auth/androidpublisher'

  credentials = ServiceAccountCredentials.from_p12_keyfile(
      SERVICE_ACCOUNT_EMAIL,
      key,
      scopes=[scope]
  )
  http = httplib2.Http()
  http = credentials.authorize(http)
  ....

Source:

  • SignedJwtAssertionCredentials has been removed: Why?

  • oauth2client-Release 2.0.0