2

セッションは 1 時間ごとに期限切れになり、サービス アカウント認証方法を使用しているときにトークンを更新する方法に関するドキュメントが見つかりません。インストール済みのアプリケーションの場合、オブジェクトRefreshTokenから取得できますstate

AuthorizationState state = new AuthorizationState(new[]
{
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/drive.metadata.readonly",
    "https://www.googleapis.com/auth/drive.readonly"
})
{
    Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl)
}
state = client.ProcessUserAuthorization(GetAuthorizationCode(), state);
Console.WriteLine(state.RefreshToken);

しかし、サービスアカウントに対してそれを行う方法は?

X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "mysecret", X509KeyStorageFlags.Exportable);

var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate)
{
    ServiceAccountId = SERVICE_ACCOUNT_EMAIL,
    Scope = DriveService.Scopes.Drive.GetStringValue(),
    ServiceAccountUser = "myemail@mydomain.com",
};

var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
DriveService service = DriveService(auth);

AssertionFlowClient.GetStateGoogle SDKソースコードから、関数が次のことを実行することがわかりました

    IAuthorizationState state = new AuthorizationState(provider.Scope.Split(' '));

    if (provider.RefreshToken(state, null)) {
        return state;
    } else {
        return null;
    }

トークンの更新を行うようです。この関数呼び出しをトークン リフレッシュ タイマーに追加しましたが、役に立ちません。Invalid credentials1時間経っても例外が発生し続けます。

4

1 に答える 1

0

サービス アカウントは更新トークンを使用しません。最初に使用したのと同じ手順を使用して、別のアクセス トークンを要求するだけです。アクセス トークンの有効期限が切れた場合の対処方法については、Google のドキュメントを参照してください。

于 2013-08-16T01:29:01.133 に答える