2017-04-06 8 views
2

다음 코드를 사용하여 시스템 로그인 (도메인 전체 인증)을 통해 사용자를 대행합니다. 이 작업을 수행하는 유일한 예는 리플렉션을 사용하여 사용자를 설정하는 것입니다. 나는이 사람이 해결해야하는 방법의 예 좀 도와 수 있다면 그래서 내가 궁금해서이 작업을 수행 할 수있는 적절한 방법이 아니다 알고시스템 계정에서 사용자에 대한 ServiceAccountCredential 만들기

다음
ServiceAccountCredential credential = 
    GoogleCredential.FromJson(GOOGLE_SYSTEM_USER_AUTH_INFORMATION) 
     .CreateScoped(Scopes) 
     .UnderlyingCredential as ServiceAccountCredential; 

var userField = typeof(ServiceAccountCredential).GetField("user", 
BindingFlags.NonPublic | BindingFlags.Instance); 
userField?.SetValue(credential, GOOGLE_CALENDAR_USERNAME); //Act in the guise of the normal user GOOGLE_CALENDAR_USERNAME 


service = new CalendarService(new BaseClientService.Initializer() 
{ 
    HttpClientInitializer = credential, 
    ApplicationName = ApplicationName, 
}); 

답변

3

는 범위를 모두 설정, 내가 그것을 할 거라고 방법 그리고 ServiceAccountCredential.Initializer를 통해 동시에 새 사용자 :

ServiceAccountCredential original = (ServiceAccountCredential) 
    GoogleCredential.FromJson(GOOGLE_SYSTEM_USER_AUTH_INFORMATION).UnderlyingCredential; 

var initializer = new ServiceAccountCredential.Initializer(original.Id) 
{ 
    User = GOOGLE_CALENDAR_USERNAME, 
    Key = original.Key, 
    Scopes = Scopes 
}; 
var credentialForUser = new ServiceAccountCredential(initializer); 

은 이제 오히려 GoogleCredential보다는 당신에게 ServiceAccountCredential을 제공합니다. 그게 현재 코드가 사용하는 것입니다, 그래서 괜찮을 것입니다 -하지만 이것도 역시 GoogleCredential을 얻는 간단한 방법이 있다면 좋을 것입니다. 우리는이 모든 것을 더 간단하게 만들어야합니다. - 그것에 대해서는 filed an issue입니다.

+0

은 매력처럼 작동합니다. 2 개의 작은 오류. GOOGLE_CALENDAR_USERNAME 및 ServiccAccountCredential misspelt 이후에 쉼표가 누락되었습니다. –

+0

@LinusNikander : 고마워요. –