Я пишу настольное приложение в Delphi и пытаюсь синхронизировать его с календарем Google (только окна, выигрыш 7 и новее). Я зарегистрировал собственную схему uri в своем системном реестре, поэтому eu.myapp:test
запустит мою программу или передаст сообщение уже запущенному экземпляру программы.Настольное приложение с пользовательской схемой uri, «Отсутствующая схема» на запрос токена
Мне удалось пройти первый этап аутентификации - я открываю браузер по умолчанию, запрашивая у пользователя разрешение на изменение своих календарей, я возвращаю код аутентификации обратно в свое программное обеспечение без заминки. Клиент OAuth зарегистрирован как приложение IOS,
Однако, когда я пытаюсь запросить фактический маркер, запрос будет отклонен (400 - Bad Request) со следующим телом ответа:
{
"error": "invalid_request",
"error_description": "Invalid parameter value for redirect_uri: Missing scheme: eu.myapp",
"error_uri": ""
}
Мой запрос тела выглядит следующим образом:
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=XXX&
client_id=YYY&
redirect_uri=eu.myapp&
grant_type=authorization_code
Согласно documentation, я должен включать переадресацию URI, полученный из API консоли, но я не нашел такого URI там. Нашли несколько более старых ответов, но консоль разработчика, видимо, была изменена с тех пор, как они были предоставлены, поэтому они больше не актуальны. Что мне не хватает?
Edit: Добавлено больше информации Я создал сервер просто nodejs и поставить его с сертификатом SSL и Nginx, так что я мог видеть, что на самом деле отправляется в поперечнике. Затем я использовал как приложение, так и пример приложения C#, чтобы отправить ему запрос маркера и контролировать тело запроса. Единственная заметная разница заключалась в том, что delphi url автоматически кодировал код (4% 2Fhky ... вместо 4/Fhky ... например). Кроме того, они казались одинаковыми.
Я также попробовал переписать приложение, чтобы прослушать локальный порт, но в итоге получил те же результаты. Существует демонстрация delphi, где они демонстрируют использование google api, используя встроенный браузер для входа пользователя (и он работает), но, согласно документации api, он устарел и скоро исчезнет. Кроме того, похоже, что я могу управлять первой переадресацией только штрафом, но получение фактических токенов терпит неудачу.
Если его настольным приложением вы, вероятно, должны просто использовать собственные учетные данные или другое. Не iOS. то вы можете просто отправить urn: ietf: wg: oauth: 2.0: oob как ваш URI перенаправления. Это в основном просто означает localhost. – DaImTo
Это рекомендуемый подход Google для настольных приложений - loopback ip или настраиваемая схема URI, и на самом деле он говорит, что вы должны выбрать iOS как тип Client при использовании подхода схемы на рабочем столе. Попытка получить образец C# для работы на данный момент, следуя их [demo] (https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp) – Oxudes
https://developers.google .com/youtube/analytics/registering_an_application Установленное приложение запускается на настольном компьютере или карманном устройстве. Вы можете создать учетные данные OAuth 2.0 для Android, Chrome, iOS и других установленных приложений. Лично я предпочитаю тип другой. Попробуйте связаться с автором демоверсии, чтобы они были рады помочь. Я не видел этого раньше, поэтому, вероятно, не будет большой помощью.Кажется, не использует клиентскую библиотеку Google .Net для C#. Поэтому мои образцы тоже не помогут. Удачи – DaImTo