c# - 从系统帐户为用户创建 ServiceAccountCredential

标签 c# google-calendar-api google-api-dotnet-client

我使用以下代码通过系统登录(域范围的身份验证)代表用户执行操作。我找到的唯一实现此目的的示例使用反射来设置用户。我知道这不是完成此任务的正确方法,所以我想知道是否有人可以帮助我举例说明如何解决这个问题

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 就更好了。我们应该让这一切变得更简单 - 我已经 filed an issue为此。

关于c# - 从系统帐户为用户创建 ServiceAccountCredential,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43256237/

相关文章:

c# - 关闭旧的应用程序实例

c# - 使用正则表达式为特殊字符添加前缀

android - 听安卓日历事件

java - 使用 Java 客户端库从 Google Calendar API v3 查询事件?

google-calendar-api - 使用 Google Calendar API 更改用户对 future 事件的响应状态

c# - 无法使用 Google Directory API Admin SDK 列出用户

c# - Amazon EC2 .NET API,启动随机实例

C# Sealed 防止一个方法被派生

c# - 谷歌API : Gmail Service Push Notification (Watch) - User not authorized to perform this action

c# - 更改 Google 默认身份验证重定向 - C#(Google 库)