我正在尝试设置c#代码来管理我们的Google域。
每当我调用service.Users.List()或DirectoryService api中的任何其他方法时,我都会收到此错误。
Google.Apis.Requests.RequestError
Insufficient Permission [403]
Errors [
Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global]
]
我按照OAuth设置上的所有说明进行操作。我使用的帐户是域管理员。
我使用的客户端密码文件在与GAM.exe一起使用时可以正常工作。这让我相信我在代码中做错了。
以下是我查询用户的代码,有什么我遗漏的吗?
static void Main(string[] args)
{
var applicationName = "App Project Name";
var userName = "admin@domain.com";
var clientID = "clientIDfromAPIcredentialpageonconsole.developers.google.com";
UserCredential credential;
using (var stream = new FileStream("C:\\gam\\client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { DirectoryService.Scope.AdminDirectoryOrgunit, DirectoryService.Scope.AdminDirectoryUser },
userName,
CancellationToken.None, null).Result;
}
var service = new DirectoryService(new BaseClientService.Initializer()
{
ApplicationName = applicationName,
HttpClientInitializer = credential
});
var list = service.Users.List();
var users = list.Execute();
}
}
答案 0 :(得分:4)
2个选项:
如果其中一个选项有效或者您仍然缺少其他选项,请更新此主题。
答案 1 :(得分:1)
范围
您似乎正在尝试此Quickstart:
但是,该tuturoial中使用的范围是:
new [] { DirectoryService.Scope.AdminDirectoryUserReadonly };
但是,在您发布的代码中,您拥有:
new[] { DirectoryService.Scope.AdminDirectoryOrgunit, DirectoryService.Scope.AdminDirectoryUser },
令牌
更改范围(如上所示)后,可能必须删除OAuth2令牌,然后重新授权对应用程序的访问。 (除非您尚未完成“授权访问”步骤。)
\token.json\Google.Apis.Auth.OAuth2.Responses.TokenResponse-user
启用API
此外,正如我认为您已经发现的那样,启用Directory API与启用Gmail API(并在不同URL中找到)的过程不同。
答案 2 :(得分:0)
这是我的工作凭证代码:
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json");
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new string[] { CalendarService.Scope.Calendar },
"username@gmail.com",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
确保在控制台中启用API,
答案 3 :(得分:0)
URL https://developers.google.com/gmail/api/quickstart/dotnet上的文档的范围设置为 静态字符串[]范围= {GmailService.Scope.GmailReadonly};将其设置为GmailService.Scope.MailGoogleCom,然后继续执行文档中指定的流程。这真是令人讨厌,我正在我的令牌响应文件中编辑范围