Мой коллега и мой проект C# WPF, который управляет курсами в Google Classroom. Мы создаем проект на платформе Google API. Мы являемся владельцем проекта. Оба имеют идентификаторы клиента OAuth 2.0. (но это не имеет значения) Я разрешаю все возможности Classroom API.
Я администратор домена нашего Gsuite for Education. Google Classroom 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";
}
Есть идеи?