我使用以下代码通过系统登录(域范围内的身份验证)代表用户进行操作。我发现实现此目的的唯一示例使用反射来设置用户。我知道这不是完成此任务的正确方法,所以我想知道是否有人可以帮助我举一个如何解决此问题的示例
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,
});
由于假设了解需要哪些属性,下面的原始答案很脆弱。现在明显简单了:
var credential = GoogleCredential.FromJson(GOOGLE_SYSTEM_USER_AUTH_INFORMATION)
.CreateScoped(Scopes)
.CreateWithUser(GOOGLE_CALENDAR_USERNAME);
这是我的做法,通过以下方式同时设置范围和新用户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
也为此。我们应该让这一切变得更简单 - 我已经提出问题为了那个原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)