Ошибка 403 - Это ошибка. Ошибка: disallowed_useragent
Я пытаюсь авторизовать пользователя для Google calendar API в приложении для IOS. Я использую функцию OAuth2 от Google для аутентификации пользователей. Страница авторизации открывается с ошибкой 403 с описанием:
Этому агенту пользователя не разрешено делать запрос авторизации OAuth к Google, так как он классифицируется как встроенный агент пользователя (также известный как web-view). Согласно нашей политике, только браузерам разрешено отправлять запросы на авторизацию в Google. Мы предлагаем несколько библиотек и примеров для нативных приложений для выполнения запроса авторизации в браузере.
Я выполнил ту же процедуру, которая описана в этой ссылке: https://developers.google.com/google-apps/calendar/quickstart/ios.
Вместо того, чтобы смотреть мой код, лучше посмотреть на эту ссылку: https://developers.google.com/google-apps/calendar/quickstart/ios. потому что я скопировал то же самое в свое приложение.
Ниже приведены мои clientId и keyChainItemName:
static NSString *const kKeychainItemName = @"Google Calendar API";
static NSString *const kClientID = @"954370342601-sgl8k0jrbqdeagea9v6vfu3tspte96ci.apps.googleusercontent.com";
В моем случае я использовал родной web view для входа в google, я обнаружил способ, что вы должны предоставить user agent в webview, это сработало для меня. Попробуйте следующий код, я уверен, что он сработает.
Добавьте код в приложение didFinishLaunchingWithOptions.
Objective C
Swift 3.0
Я также столкнулся с этой проблемой в своем проекте cordova. Вы можете попробовать следующее: Просто добавьте это в ваш config.xml, у меня сработало.
Короткий ответ заключается в том, что Google обновила свои ограничения безопасности для потока OAuth. Они не собираются разрешать нативным веб-просмотрам инициировать поток OAuth, а скорее поощряют людей использовать для этого браузеры ОС. В вашем случае, вероятно, придется подождать, пока SDK календаря Google обновит свой код, чтобы подчиниться новому рекомендованному потоку. Более подробную информацию можно найти в блоге Google.
EDIT : Я попытался создать кроссплатформенный плагин, который оборачивает родные SDK для входа в Google для использования в приложении Xamarin forms. Дополнительную информацию можно найти здесь.
Как упоминалось в предыдущих ответах,
SFSafariViewController
- это выход, но для тех, кто все еще используетWKWebView
для OAuth авторизации, есть простой обходной путь.Просто измените
customUserAgent
на один из list или установите его в произвольное значение. После этого ошибкаdisallowed_useragent
исчезнет:Для изменения
User-Agent
вUIWebView
вы можете посмотреть этот ответ.Но будьте осторожны, так как некоторый код бэкенда может зависеть от значения заголовка
User-Agent
.Получил ту же проблему. Решилась установкой следующего свойства для объекта webview:
Надеюсь, это поможет.
По умолчанию, если у вас нет приложения google, google SDK открывает вход в систему внутри
UIWebView
, когда мы инициируем вход с помощью следующего метода.Я просто добавил одну строку перед этим, которая выглядит следующим образом.
Теперь google'не авторизуется с помощью всплывающего окна
UIWebView
. Вместо этого он открывается в браузере Safari. И теперь все работает как раньше.Существует обходной путь решения этой проблемы после недавних изменений в политике Google OAuth.
После интеграции Google Sign и включения Google Calendar API я смог работать с Google Calendar API для получения и добавления событий календаря. Нам просто нужно установить авторизатор для GTLServiceCalendar, который получается после входа в Google.
service.authorizer = user.authentication.fetcherAuthorizer()
.Вот фрагменты кода Google GIDSignIn, а затем получение событий календаря.
Вот как мой раздел учетных данных отображается в Google Dev Console.
Посмотрите на этот вопрос. Вместо этого используйте GTMAppAuth.
Google решил больше не позволять встроенным браузерам обрабатывать аутентификацию oAuth. Лучший способ - использовать SFSafariViewController на iOS. Вот как можно решить эту проблему с помощью CloudRail SDK:
В Objective-C:
и Swift:
Полную статью в блоге, посвященную этой проблеме, можно найти здесь: Решение проблемы 'disallowed_useragent' для сервисов Google
Это работает для меня
После завершения входа в систему google sign-in, используйте
currentUser
для полученияfetcherAuthorizer
, который можно использовать как авторизатор для Google Drive Service.После этого вы можете использовать Google Drive Service в обычном режиме:
Я решил эту проблему за 1 год :-) шучу. просто добавьте следующую строку в предпочтения в config.xml
Пожалуйста, обратите внимание, что я решил эту проблему входа в Google с помощью браузера Inapp.
Спасибо