0

Drive API を使用して Google Apps ドメインを検査しています。サービスを正常に作成しましたが、ドメインに一時停止中のユーザーがいる場合、すべてのユーザーの権限 ID を取得しようとして失敗します。get_about 関数を使用すると、401 Unauthorized : Invalid Credentials が発生します。とにかくそのエラーを回避する方法はありますか? どうにかして別の種類のサービスを作成する必要がありますか? 現在、そのユーザーをスキップすることを余儀なくされています。

#Passing in a already created user service
def get_about(service):
    return service.about().get().execute()

サービスを作成する場所は次のとおりです。

class DriveService(object):
    """
    The main entry class to constructing the google drive api client service
    We wrap the service so it can be used as normal but with some error
    handling provided
    """

    raw_service = None
    http = None
    auth_scope = 'https://www.googleapis.com/auth/drive'

    def __init__(self, user_email):
        key_file_path = os.path.join(os.path.split(__file__)[0],
                                 SERVICE_ACCOUNT_PEM_FILE)
        with open(key_file_path, 'rb') as f:
            key = f.read()

        credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL,
                                                key,
                                                scope=self.auth_scope,
                                                prn=user_email)
        self.user_email = user_email
        self.http = credentials.authorize(httplib2.Http())
        try:
            self.raw_service = build('drive', 'v2', http=self.http,
                             requestBuilder=BackoffHttpRequest,
                             )
        except:
            import pdb
            pdb.set_trace()

    def __getattr__(self, attr):
        try:
            return object.__getattribute__(self, attr)
        except AttributeError:
            return getattr(self.raw_service, attr)
4

1 に答える 1

1

残念ながら、これを回避する方法はありません。アカウントが無効になり、JWT アサーションを使用して有用なことを行うことができなくなります。

現時点では、ユーザー ファイルを削除または一時停止する前に、ユーザー ファイルの所有権を別のアカウントに譲渡する必要があります。すべてのユーザー > すべてのユーザーのすべてのファイル > すべてのファイルのすべての権限のリストを取得します。そこから、前述のユーザー名のアクセス許可 ID をローカルで解析して、目的のデータを取得できます。私の環境では、そのデータをプルするのに約 40 分かかります。これは、有用なデータを取得するためにサード パーティのドライブ アプリ (CloudLock、General Audit Tool、Flashpanel) が行うことだと思います。おそらくあなたが望んでいた答えではありません。

この状況では、アサーションを必要とせずにグローバル ドライブの結果を取得する API が非常に役立ちます。または、fileID 以外の何かでアクセス許可を照会できるとよいでしょう。うまくいけば、これはロードマップにあります。

于 2013-08-02T23:01:51.297 に答える