#vb.net #winforms
#.net #vb.net #winforms #google-api #google-keep-api
Вопрос:
Выше проблема
Я пытаюсь получить токен доступа для чтения данных из моей собственной учетной записи Google с помощью vb.net окно формы приложения . Я что-то пропустил?
Почему он должен открывать веб-браузер для авторизации? Мне просто нужно получить доступ только к моим собственным данным.
Код формы окна
Private Async Sub GetToken()
Dim scopes As New List(Of String)
scopes.Add(KeepService.Scope.Keep)
Dim stream = New FileStream("file path.json", FileMode.Open)
Dim _userCredentials As UserCredential =
Await Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets, scopes, "user", System.Threading.CancellationToken.None)
End Sub
Сведения об ошибке
Ошибка авторизации Ошибка 400: invalid_scope Некоторые запрошенные области не могут быть показаны: [https://www.googleapis.com/auth/keep ]
Комментарии:
1. это говорит о том, что область недопустима, попробуйте что-то вроде
profile
вместо2. это нормально, но позволит ли мне загружать свои собственные данные в качестве администратора API?
3. Какой тип данных вы хотите загрузить? Есть ли раздел, в котором вы можете просмотреть свое зарегистрированное приложение и посмотреть, какие области определены?
4. Загрузка данных — это второстепенная задача, во-первых, Google даже не позволяет мне авторизовать собственный api, используя мои собственные учетные данные api. похоже, что нет такого API Google, который позволял бы мне загружать мои собственные данные Google Keep без аутентификации на основе веб-браузера.
5. @Pankaj без взаимодействия с пользователем называется авторизацией учетной записи службы. Это полностью отличается от того, что вы делаете сейчас, используя Oauth2 для авторизации пользователя. Из того, что я могу сказать, это ошибка в api, не связанная с типом авторизации, которую вы пытаетесь использовать.
Ответ №1:
Если мы проверим документацию для метода Notes.list, вы заметите, что в нем указано, что вам нужно использовать одну из следующих областей
Я протестировал его со следующим кодом C #
var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.FromFile(clientSecretJson).Secrets,
new []{KeepService.ScopeConstants.KeepReadonly, KeepService.ScopeConstants.Keep},
"userName",
CancellationToken.None,
new FileDataStore("credPath", true));
var service = new KeepService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Google Keep Oauth2 Authentication Sample"
});
var notes = await service.Notes.List().ExecuteAsync();
В обоих случаях я получаю следующее сообщение об ошибке
Как вы можете видеть из сообщения об ошибке, библиотека передает правильную область, как указано в документации. Сам API Google keep отказывается от области.
На мой взгляд, это ошибка в API, и я опубликовал проблему в системе отслеживания проблем 210500028
Обновление 16-12-2021: Google проверил эту ошибку и теперь проводит внутреннее расследование.
рабочее пространство
Об этом api есть примечание. Похоже, что он может работать только с учетными записями домена Workspace. Я тестировал его с обычной учетной записью Gmail, а также с учетной записью домена Workspace. Результаты были такими же.
Этот API является корпоративным API, используемым для создания заметок Keep в вашем домене и управления ими, включая решение проблем, выявленных программным обеспечением CASB.
Комментарии:
1. это работает, если мы добавляем только область электронной почты, но в конце мне пришлось столкнуться с проблемой разрешения. Вот скриншот. i.stack.imgur.com/TeCFQ.png
2. Это не часть исходного вопроса, возможно, вы захотите открыть новый вопрос.. убедитесь, что пользователь, которому вы разрешаете, имеет доступ к учетной записи домена workspace для использования этого API.
3. Теперь Google проверил это как ошибку. И проводят внутреннее расследование.
Ответ №2:
Я уже оказывал поддержку в решении проблем с Keep API, поскольку у администраторов регулярно возникают проблемы с этим API.
В настоящее время API Keep использует: …/auth/keep и …/auth/keep.области только для чтения для OAuth. Эти области не разрешены на экране согласия. Приложение, для которого требуются области хранения, может быть аутентифицировано, если вы как администратор домена предварительно утвердите область [области] для приложения или с помощью учетной записи службы:
- Разрешение администратора: вы можете авторизовать его, будучи суперадминистратором, поскольку Keep — это API только для предприятия. Если это приложение торговой площадки, вы можете авторизовать его, указав идентификатор клиента для областей хранения в консоли администратора вашего домена.
- Учетная запись службы: как администратор, вы можете предоставить делегирование учетной записи службы в масштабах всего домена, и эта учетная запись службы выдает вызовы, олицетворяющие пользователя, в данном случае вашу собственную учетную запись, поскольку это и есть ваша цель. Это чрезвычайно привилегированный вызов, учитывая, что пользователям явно не требуется аутентифицировать себя. При использовании этого метода авторизации вам необходимо разрешить его в консоли администратора.
Выполнение любого из двух описанных выше методов должно позволить вам использовать Keep API без запуска сообщения об ошибке недопустимой области.
Комментарии:
1. Как я могу предварительно утвердить области?
2. Вы можете сделать это как администратор, авторизовав области из приложения или через учетную запись службы, как я подробно описал, вам нужно будет создать небольшое приложение для выполнения авторизации, использование учетной записи службы было бы наиболее полезным, поэтому я бы рекомендовал сделать это таким образом.
3. Я проверил, что нет способа обойти область или предварительно утвердить их.