2017-12-19 14 views
2

私の組織の新しいAndroid管理APIにアクセスしようとしていますが、APIへのアクセスに問題があります。 APIエクスプローラを使用してAPIにアクセスするとすべて正常に動作します。 Googleのサーバーでこれを実行するには、Googleのクラウドコンソールで新しいプロジェクトを作成し、そこでサービスアカウントを作成しました。私はキーをダウンロードし、私のマシン上のローカルテストに使用します。 しかし、最初のsignupUrlコール時に、「発信者にプロジェクトを管理する権限がありません」という403エラーが表示されます。私が使用しているサービスアカウントは、「プロジェクトの所有者」の役割を持って、私はそれをさらに権限を与えることができますどのように表示されていない...アンドロイド管理サインアップURLの作成に失敗しました

私が使用しているコード:

def initial_enterprise_user(request): 
    enterprise_token = request.GET.get('enterpriseToken') 
    usr = request.user 

    scopes = ['https://www.googleapis.com/auth/androidmanagement'] 

    credentials = ServiceAccountCredentials.from_json_keyfile_name(settings.SERVICE_ACCOUNT, scopes=scopes) 

    if enterprise_token is None: 
     androidmanagement = build('androidmanagement', 'v1', credentials=credentials) 
     resp = androidmanagement.signupUrls().create(projectId=settings.ANDROID_MGMT_PROJECTID).execute() 
     if resp.status_code == 200: 
      usr.signup_url_name = resp.json()['name'] 
      usr.save() 
      return render(request, 'initial_login.html', {'response_url': resp.json()['url']}) 
     else: 
      return HttpResponse('Failed to get signup url') 
    else: 
     # handle token present 
+0

サービスアカウントのプロジェクトは、アクセスしようとしているプロジェクト(settings.ANDROID_MGMT_PROJECTID)と同じですか? – Fred

+0

はい、そうです。私は前に別のデバイス管理POCで使用されていた別のプロジェクトを使用していましたが、まったく新しいプロジェクトを作成しようとしました。 Android Management APIをこのプロジェクトに追加しましたが、動作しないようです... – stamppot

+0

私は再現しようとしましたができませんでした。ロール "Owner"または "Editor"を持つサービスアカウントを作成すると、サービスアカウントを作成するために使用されたプロジェクトでsignupUrls.createメソッドを呼び出すことができます。サービスアカウントが適切なプロジェクト(https://console.cloud.google.com/iam-admin/iam/)に適切な役割を持っているかどうかをIAM設定で確認しますか? – Fred

答えて

1

I Android管理APIを有効にする前にサービスアカウントを作成して、システムに新しいプロジェクトを作成しました。サービスアカウントは、[Owner]ロールが選択されて作成されました。これは、今働いているように、アプリで正しい順序を有効にしたようです。以前は、APIをプロジェクトに追加してからサービスアカウントを作成し、APIにリンクしました。

+0

あなたのソリューションを共有していただきありがとうございます!問題は、権限がロール内でどのようにリストされているかと関係があり、所有者の役割は権限の集合に過ぎず、これらの権限の1つでは、デバイスの管理が可能です。しかし、とにかく、聞いてうれしいことは、解決策を見つけました。 – Fred

関連する問題