Google Admin SDK - 异常access_denied未经授权的请求客户端

时间:2014-08-14 17:18:54

标签: google-admin-sdk google-api-dotnet-client

我希望有人可以帮助我。

请查看下面的源代码。最后命中执行时。我会收到以下错误:

Google.Apis.Auth.OAuth2.Responses.TokenResponseException未处理   _HResult = -2146233088   _message =错误:" access_denied",说明:"请求的客户端未经授权。",Uri:""

我尝试了很多东西。创建用户,列表组等(具有正确的范围)但每次我都得到相同的错误。

我创建了一个服务帐户,Google Developers Console中的所有API都设置为" on" 我用于模仿的用户是完全管理员。

我尝试过几件事,但我必须做些蠢事。 代码看起来很像Stack Overflow上的另一个问题:Google Admin SDK Unable to Create User - Exception 403 Forbidden 但我的不会工作。任何人都可以告诉我我忘了什么吗?

private static readonly string[] Scopes = new string[] { DirectoryService.Scope.AdminDirectoryUser, DirectoryService.Scope.AdminDirectoryGroup, DirectoryService.Scope.AdminDirectoryGroupMember };

    static void Main(string[] args)
    {

        String serviceAccountEmail = "***@developer.gserviceaccount.com";
        var certificate = new X509Certificate2(@"file.p12", "notasecret", X509KeyStorageFlags.Exportable);
        ServiceAccountCredential credential = new ServiceAccountCredential(
           new ServiceAccountCredential.Initializer(serviceAccountEmail)
           {
               Scopes = Scopes,
               User = "admin email address",

           }.FromCertificate(certificate));
        var service = new DirectoryService(new BaseClientService.Initializer()
       {
           HttpClientInitializer = credential,
           ApplicationName = "User Provisioning",
       });

        User newuserbody = new User();
        UserName newusername = new UserName();
        newuserbody.PrimaryEmail = "bbacon@correct.domain";
        newusername.GivenName = "Bob";
        newusername.FamilyName = "Bacon";
        newuserbody.Name = newusername;
        newuserbody.Password = "iambacon";

        Google.Apis.Admin.Directory.directory_v1.Data.User results = service.Users.Insert(newuserbody).Execute();

        Console.WriteLine("Press any key to continue!");
        Console.ReadKey();
    }

1 个答案:

答案 0 :(得分:4)

在您的管理控制台中,您是否明确授予了客户端ID的权限?仅在开发人员控制台中启用API是不够的,您必须在管理控制台中专门授予此客户端ID范围访问权限,以便在您的域中模拟用户。

  1. 转到Google Apps域的管理控制台。

  2. 从控件列表中选择安全性。如果您没有看到列出的安全性,请从页面底部的灰色栏中选择更多控件,然后从控件列表中选择安全性。

  3. 从选项列表中选择高级设置。

  4. 在“身份验证”部分中选择管理第三方OAuth客户端访问。

  5. 在客户名称字段中输入服务帐户的客户ID。

  6. 在“一个或多个API范围”字段中,输入应授予您的应用程序访问权限的范围列表。例如,如果您需要对Google Drive API和Google Calendar API进行全域访问,请输入:https://www.googleapis.com/auth/drivehttps://www.googleapis.com/auth/calendar

  7. 单击“授权”按钮。

  8. 如果这解决了权限错误,请告诉我。