我使用以下代码通过系统登录(域范围的身份验证)代表用户行事。我找到的唯一一个实现此功能的例子是使用反射来设置用户。我知道这不是实现这一目标的正确方法,所以我想知道是否有人可以帮我解决这个问题应该如何解决
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,
});
答案 0 :(得分:4)
以下是我的工作方式,通过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);
现在,它为您提供ServiceAccountCredential
而不是GoogleCredential
。这就是你当前的代码所使用的内容,所以它应该没问题 - 但如果有一种简单的方法可以获得GoogleCredential
,那就太好了。我们应该把这一切变得更简单 - 我已经filed an issue了。