2013-08-14 2 views
2

내 세션이 매 시간 만료되며 서비스 계정 인증 방법을 사용할 때 토큰을 새로 고치는 방법에 대한 문서를 찾을 수 없습니다. 설치된 응용 프로그램을 위해 나는 state 객체Google 드라이브 서비스 계정 새로 고침

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); 

에서 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 = "[email protected]", 
}; 

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

구글 SDK 소스 코드에서 나는 AssertionFlowClient.GetState 함수가 토큰 새로 고침을하는 것처럼 다음

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

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

그래서 보이는 수행하는 것을 발견했다. 이 함수 호출을 토큰 새로 고침 타이머에 추가했지만 도움이되지 않습니다. 나는 아직도 1 시간 후에 Invalid credentials 예외를 얻는 것을 계속한다.

+0

좀 더 구체적으로 요구 사항을 알려주시겠습니까? 위에서 내가 이해 한 것은 새로 고침 토큰이 있고 원하는 모든 것이 새로운 액세스 토큰이라는 것입니다. 맞습니까? –

답변

0

서비스 계정은 새로 고침 토큰을 사용하지 않습니다. 처음 사용한 것과 동일한 절차를 사용하여 다른 액세스 토큰을 요청하면됩니다. 무엇을해야하는지 Google의 문서를 참조하십시오. when access tokens expire.

+0

감사. 하지만 어떻게해야합니까? Google 클라이언트 SDK를 사용하고 있습니다. 이전 객체를 삭제하고 새로운'DriveService' 객체를 만들어야합니까? – axe