Google OAUTH: URI перенаправления в запросе не соответствует зарегистрированному URI перенаправления

Я пытаюсь сделать загрузку на YouTube из моего веб-приложения на основе Java, я провел несколько дней, чтобы понять, что и где проблема, и я не могу ее получить, потому что сейчас я вытаскиваю волосы с головы.

Я зарегистрировал свое веб-приложение в консоли Google, поэтому я получил пару идентификаторов клиента и секрет и возможность загрузить файл типа JSON с моей конфигурацией.

Итак, вот конфигурация:

{
    "web":{
        "auth_uri":"https://accounts.google.com/o/oauth2/auth",
        "client_secret":"***",
        "token_uri":"https://accounts.google.com/o/oauth2/token",
        "client_email":"***",
        "redirect_uris":["http://localhost:8080/WEBAPP/youtube-callback.html","http://www.WEBAPP.md/youtube-callback.html"],
        "client_x509_cert_url":"***",
        "client_id":"***",
        "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
        "javascript_origins":["http://www.WEBAPP.md/"]
    }
}

как возможно, что я получаю URL по умолчанию от Гугл?

The redirect URI in the request: http://localhost:8080/Callback did not match a registered redirect URI

Он всегда дает мне по умолчанию http://localhost:8080/Callback URL вместо моего.

и консоль IDE показывает мне, что:

Please open the following address in your browser: https://accounts.google.com/o/oauth2/auth?client_id=***&redirect_uri=http://localhost:8080/Callback&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload Attempting to open that address in the default browser now...

Я использую последнюю версию зависимостей: google-api-сервисы-youtube v3-rev99-1.17.0-rc и google-api-сервисы-youtubeAnalytics v1-rev35-1.17.0-rc

4 ответов


когда ваш браузер перенаправляет пользователя на страницу OAuth Google, вы передаете в качестве параметра URI перенаправления, на который вы хотите вернуть сервер Google с ответом токена? Установка URI перенаправления в консоли-это не способ сообщить Google, куда идти, когда происходит попытка входа в систему, а скорее способ сообщить Google, какие разрешенные URI перенаправления (поэтому, если кто-то другой пишет веб-приложение с вашим идентификатором клиента, но другим URI перенаправления он будет запрещен); ваше веб-приложение следует, когда кто-то нажимает кнопку "Войти", отправить браузеру:

https://accounts.google.com/o/oauth2/auth?client_id=XXXXX&redirect_uri=http://localhost:8080/WEBAPP/youtube-callback.html&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload

(URI обратного вызова, переданный в качестве параметра, должен быть закодирован url, btw).

когда сервер Google получает авторизацию от пользователя, он перенаправляет браузер на все, что вы отправили в качестве redirect_uri. Он будет включать в этот запрос маркер в качестве параметра, поэтому ваша страница обратного вызова может затем проверить маркер, получить маркер доступа и перейти к другим частям вашего приложение.

если вы побываете:

http://code.google.com/p/google-api-java-client/wiki/OAuth2#Authorization_Code_Flow

вы можете увидеть лучшие образцы клиента java там, демонстрируя, что вы должны переопределить getRedirectUri метод для указания пути обратного вызова, поэтому по умолчанию не используется.

URI перенаправления находятся в client_secrets.json файл по нескольким причинам ... один большой, так что поток oAuth может проверить, что перенаправление ваше приложение определяет, что позволяет ваше приложение.

если вы посещаете https://developers.google.com/api-client-library/java/apis/youtube/v3 вы можете создать образец приложения для себя, который основан непосредственно из вашего приложения в консоли, в котором (снова) метод getRedirectUri перезаписывается для использования ваших конкретных обратных вызовов.


Я думаю, что столкнулся с той же проблемой, что и вы. Я решил эту проблему со следующими шагами:

1) Перейти к Консоль Разработчиков Google

2) установить JavaScript origins:

3) Установить Перенаправление URIs:


вам нужно зайти в консоль разработчика и установить

http://localhost:8080/WEBAPP/youtube-callback.html

в качестве URL обратного вызова.

видео немного устарел, поскольку он показывает старую консоль разработчика вместо новой, однако концепции все равно должны применяться. Вам нужно найти свой проект в консоли разработчика и зарегистрировать URL обратного вызова.


я смог заставить мою работу работать, используя следующие учетные данные клиента:

авторизованные JavaScript origins

http://localhost

авторизованный перенаправление URIs

http://localhost:8090/oauth2callback

Примечание: я использовал порт 8090 вместо 8080, но это не имеет значения, пока ваш скрипт python использует тот же порт, что и ваш client_secret.файл json.

ссылки: Python Quickstart