用凭据创建Google日历事件用Google日历API库模拟用户.NET 7 C#

qpgpyjmq  于 2023-02-20  发布在  .NET
关注(0)|答案(1)|浏览(128)

在. NET 7中,如果不在

ServiceAccountCredential.Initializer(original.Id)

块,我的日历事件可以创建,没有错误。但如果我指定如下所示的用户,我得到这个错误:
错误:未授权客户端,
描述:未授权客户端使用此方法检索访问令牌,或者未授权客户端使用请求的任何作用域。
我的服务帐户具有域范围的委派,通过OAuth2允许日历的范围,并且我已明确授予SA对用户日历的访问权限(当我尝试使用未明确授予访问权限的帐户时,我根本无法创建日历条目)。
如何获取服务帐户的适当凭据以模拟域中的最终用户?
creating-a-serviceaccountcredential-for-a-user-from-a-systems-account这么远的功劳
以前的答案似乎不适用于最新版本。
在我的API代码中,它调用身份验证服务,然后创建事件:

Google.Apis.Calendar.v3.CalendarService CS = await SA.AuthenticateServiceAccountSO();

var result = CS.Events.Insert((Event)newEvent, clientemail).Execute();

在服务验证服务帐户SO()中:

public async Task<CalendarService> AuthenticateServiceAccountSO()
{
    await Task.Delay(1);
    string? serviceAccountCredentialFilePath = _config.GetValue<string>("ServiceAccountFilePath");
    string? ClientEmail = _config.GetValue<string>("TestingUserAccountEmail");
    
    string[] scopes = new string[] { CalendarService.Scope.Calendar };
    
    ServiceAccountCredential original = (ServiceAccountCredential)GoogleCredential.FromFile(serviceAccountCredentialFilePath).UnderlyingCredential;
    
    var initializer = new ServiceAccountCredential.Initializer(original.Id)
                          {
                              User = ClientEmail,
                              Key = original.Key,
                              Scopes = scopes
                          };
    
    var credential = new ServiceAccountCredential(initializer);
    
    CalendarService service = new(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Calendar_Appointment event Using Service Account Authentication"
                });
    
    return service;
}
9rnv2umw

9rnv2umw1#

您当前复制的服务帐户凭据相对较少-特别是没有KeyId。但无论如何,您可以更简单地完成所有操作:

var credential = GoogleCredential.FromFile(serviceAccountCredentialFilePath)
    .CreateScoped(CalendarService.Scope.Calendar)
    .CreateWithUser(ClientEmail);

相关问题