1

で述べたように、サービス アカウントで Google Drive API(C#) を使用しています。

https://developers.google.com/drive/delegation

DriveService オブジェクトを操作することはできますが、1 時間後に「リモート サーバーがエラーを返しました: (401) Unauthorized」という例外でエラーになります。

「access_type」を「offline」に設定することでこの問題を解決できることはわかっていますが、DriveService オブジェクトにこのプロパティを設定することはできません。
この Google ドライブ サービス オブジェクトを更新する方法を知っている人はいますか?

前もって感謝します

4

2 に答える 2

3

サービス アカウントには秘密鍵が付属しています。これは、ユーザー主導の同意フローの結果として返されるリフレッシュ トークンと同等/スーパーセットです。

ユーザーが (Web サーバーまたは同様の OAuth フローを介して) オフライン アクセスに同意すると、アクセス トークンといつでも (クライアント シークレットと共に) 交換できる更新トークンが返されます。

同様に、サービス アカウントの秘密鍵を使用して、アクセス トークンと交換できるアサーションに署名することもできます。これは、同意画面を受け入れるユーザーがいない場合や、代わりに作業を実行している場合に役立ちます。組織内の他のユーザー。

アクセス トークンを取得すると、同じように処理されます。1 時間後に有効期限が切れると予想されます。その時点で、新しいアクセス トークンを要求する必要があります。これは、サービス アカウントの場合、新しいアサーションを作成して署名することを意味します。

通常、アクセス トークンの有効期限が切れていることに気付き、新しいトークンのリクエストは Google クライアント ライブラリによって処理されますが、私は C# バージョンには詳しくありません。役立つ DriveService オブジェクトを作成するコードを共有できれば。

于 2013-05-24T00:35:11.913 に答える
1

オフライン アクセス モードを設定すると、ユーザーが初めてログインしたときに、アプリは更新トークンを取得します。

access_type :: ユーザーがブラウザにいないときにアプリケーションが Google API にアクセスする必要があるかどうかを示します。このパラメータのデフォルトは online です。ユーザーがブラウザにいないときにアプリケーションがアクセス トークンを更新する必要がある場合は、オフラインを使用します。これにより、アプリケーションがユーザーの認証コードを初めて交換するときに、アプリケーションが更新トークンを取得することになります。

現在のアクセス トークンの有効期限が切れたら、後でこの更新トークンを使用して新しいアクセス トークンを取得します。基本的に、アプリは更新トークンとクライアント資格情報を使用してトークン交換エンドポイント ( https://accounts.google.com/o/oauth2/tokenへの POST ) にヒットし、Google で (更新トークン + アクセス トークン) を発行します。 ) ペアリングします。
詳細については、このリンクを参照してください。

編集-
サービス アカウントのドキュメントを確認したところ、リフレッシュ トークンを取得して使用するサンプル C# アプリも見つかりました。こちら を参照してください
これが役立つことを願っています。

于 2013-05-15T14:05:55.653 に答える