在. 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;
}
1条答案
按热度按时间9rnv2umw1#
您当前复制的服务帐户凭据相对较少-特别是没有
KeyId
。但无论如何,您可以更简单地完成所有操作: