帐户仅限 google 课堂 API

Account restricted to google Classroom API

我的同事和我有一个 C# WPF 项目,它管理 Google 课堂中的课程。 我们在 Google API 平台创建项目。我们是项目的所有者。 两者都有 OAuth 2.0 客户端 ID。 (不过没关系) 我允许所有课堂 API 的范围。

我是我们 Gsuite for Education 的域管理员。 Google 域中允许使用课堂 API。

他可以登录并使用程序,没有任何错误,各项功能都可以。 我不能,因为我收到错误 400,invalid_request 帐户受限。

我尝试使用 API Explorer,只有当我想获取 google 课堂课程的主题列表时才会出现此错误。

范围: https://www.googleapis.com/auth/classroom.topics https://www.googleapis.com/auth/classroom.topics.readonly openid

        txtLog.Text += "Try login to Google...\n"; 
        UserCredential credential;

        using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
        {
            
            // The file token.json stores the user's access and refresh tokens, and is created
            // automatically when the authorization flow completes for the first time.
            string credPath = "token.json";
            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                new string[] 
                { 
                    ClassroomService.Scope.ClassroomCourses, 
                    ClassroomService.Scope.ClassroomRosters, 
                    ClassroomService.Scope.ClassroomProfileEmails, 
                    ClassroomService.Scope.ClassroomProfilePhotos,
                    ClassroomService.Scope.ClassroomTopics
                },
                "admin",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
            txtLog.Text += $"Credential file saved to: {credPath}\n";
        }

        // Create Classroom API service.
        service = new ClassroomService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Jedlik Classroom Manager",
        });

        // Define request parameters.
        CoursesResource.ListRequest request = service.Courses.List();
        request.PageSize = 100;

        // List courses.
        ListCoursesResponse response = request.Execute();
        if (response.Courses != null && response.Courses.Count > 0)
        {
            txtLog.Text +=$"Number of coureses: {response.Courses.Count}\n";
            lstCourses.ItemsSource = response.Courses.ToList();
            lstCourses.DisplayMemberPath = "Name";
            lstCourses.SelectedValuePath = "Id";
            lstCourses.SelectedIndex = 0;
        }
        else
        { 
            txtLog.Text += $"No courses found\n";
        }

答案:

这听起来像是您的帐户有问题。要获得解决方案,您应该联系 G Suite 支持人员。

更多信息:

如果尝试验证的帐户存在帐户限制,那么 Stack Overflow 社区无法提供帮助 - 特别是如果相同的代码适用于您域中的另一位老师 ,您在 courses.topics 参考页的 Try this API 函数中收到相同的响应。

您可以使用 this page

上的链接联系 G Suite 支持

2020.06.01 更新:

这实际上似乎是一个错误!

Google 的问题跟踪器上有一份报告,其中详细说明了同类行为:

鉴于回复,

Google 似乎确实知道这个问题,但我认为最好对此进行更新。

对于未来的读者:如果这个问题还没有被修复,你也可以点击前面提到的问题页面左上角问题编号旁边的☆,它可以让Google 知道有更多人遇到此问题,因此更有可能更快地被发现。

参考文献: