проблемы авторизации OAuth 2.0

Тема в разделе "PHP", создана пользователем асс, 23 ноя 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Добрый день.
    Помогите как пройти авторизацию.

    Жму на сссылку - Аутентификация через Google
    Выдает ошибку


    400. That’s an error.


    Error: redirect_uri_mismatch

    Application: ssu

    You can email the developer of this application at: w@gmail.com

    The redirect URI in the request: http://localhost:4567/ did not match a registered redirect URI.

    Learn more

    Request Details

    That’s all we know.


    код

    PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
        <title>Аутентификация С‡РµСЂРµР· Google</title>
    </head>
    <body>

    <?php

    $client_id 
    '1081633000000ххххххauh65de.apps.googleusercontent.com'// Client ID
    $client_secret 'ZQXхххххххMvz2-7'// Client secret
    $redirect_uri 'http://localhost:4567/'// Redirect URIs

    $url 'https://accounts.google.com/o/oauth2/auth';

    $params = array(
        
    'redirect_uri'  => $redirect_uri,
        
    'response_type' => 'code',
        
    'client_id'     => $client_id,
        
    'scope'         => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
    );

    echo 
    $link '<p><a href="' $url '?' urldecode(http_build_query($params)) . '">Аутентификация С‡РµСЂРµР· Google</a></p>';

    if (isset(
    $_GET['code'])) {
        
    $result false;

        
    $params = array(
            
    'client_id'     => $client_id,
            
    'client_secret' => $client_secret,
            
    'redirect_uri'  => $redirect_uri,
            
    'grant_type'    => 'authorization_code',
            
    'code'          => $_GET['code']
        );

        
    $url 'https://accounts.google.com/o/oauth2/token';

        
    $curl curl_init();
        
    curl_setopt($curlCURLOPT_URL$url);
        
    curl_setopt($curlCURLOPT_POST1);
        
    curl_setopt($curlCURLOPT_POSTFIELDSurldecode(http_build_query($params)));
        
    curl_setopt($curlCURLOPT_RETURNTRANSFERtrue);
        
    curl_setopt($curlCURLOPT_SSL_VERIFYPEERfalse);
        
    $result curl_exec($curl);
        
    curl_close($curl);
        
    $tokenInfo json_decode($resulttrue);

        if (isset(
    $tokenInfo['access_token'])) {
            
    $params['access_token'] = $tokenInfo['access_token'];

            
    $userInfo json_decode(file_get_contents('https://www.googleapis.com/oauth2/v1/userinfo' '?' urldecode(http_build_query($params))), true);
            if (isset(
    $userInfo['id'])) {
                
    $userInfo $userInfo;
                
    $result true;
            }
        }

        if (
    $result) {
            echo 
    "Социальный ID РїРѕР»СЊР·РѕРІР°С‚еля: " $userInfo['id'] . '<br />';
            echo 
    "Имя РїРѕР»СЊР·РѕРІР°С‚еля: " $userInfo['name'] . '<br />';
            echo 
    "Email: " $userInfo['email'] . '<br />';
            echo 
    "Ссылка РЅР° РїСЂРѕС„иль РїРѕР»СЊР·РѕРІР°С‚еля: " $userInfo['link'] . '<br />';
            echo 
    "РџРѕР» РїРѕР»СЊР·РѕРІР°С‚еля: " $userInfo['gender'] . '<br />';
            echo 
    '<img src="' $userInfo['picture'] . '" />'; echo "<br />";
        }

    }

    ?>

    </body>
    </html>
     
  2. qpPeW

    qpPeW Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    90
    Симпатии:
    32
    А разве OAuth работает на локалхосте ?
     
  3. Q_BASIC

    Q_BASIC

    Регистр.:
    30 ноя 2013
    Сообщения:
    406
    Симпатии:
    280
    Мне кажется у Вас редирект происходит не на тот что указан в настройках приложения. К примеру в настройках: example.com, а Вы редиректите на localhost
     
    Пендель нравится это.
  4. Bravis

    Bravis Писатель

    Регистр.:
    17 окт 2014
    Сообщения:
    7
    Симпатии:
    9
    Если стоят все библиотеки по почему нет? Другое дело что урл http://localhost:4567/ не корректный для его АПИ, скорее всего. приведите его в более понятный для гугла вид - с доменной зоной
     
  5. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    У меня на сайте есть папка скажем demo


    Вот тут инструкция https://developers.google.com/drive/web/quickstart/quickstart-php#step_1_enable_the_drive_api
    Тут я слил библиотеки http://code.google.com/p/google-api-php-client/downloads/list?can=1&q=

    Заливаю папку google-api-php-client на сайт в папку demo

    тут же создаю файл из шага 2
    quickstart.php.


    В этот файлик я прописал данные которые взял в аккаунте гугла


    Шаг 4:

    Когда на сайте выводится сгенерировнная ссылка Пример
    https://accounts.google.com/o/oauth...ive&access_type=offline&approval_prompt=force


    st запрашивает следующее:
    Просмотр файлов на Google Диске и управление ими
    Соглашаясь с этими документами, вы разрешаете приложению и компании Google использовать ваши данные в соответствии с Условиями использования и Политикой конфиденциальности. Вы можете изменить настройки доступа к аккаунту в любое время.

    Жму enter
    е удалось подключиться к удалённому серверу

    Вы попытались получить доступ к адресу https://accounts.google.com/o/oauth...n=APsBz6gAAAAAVHHv77UYjqqvTBF0fQu45taxi7AjXqP,

    который сейчас недоступен. Убедитесь, что веб-адрес (URL) введён правильно, и попытайтесь перезагрузить страницу.

    На этом я застрял.

    Хочу сделать хранение бекапов на Гугл диске. Весь день промучался так и не смог ничего сделать.


    Похоже справка у них старая для OAuth 1.0
    А на сайте стоит OAuth 2.0


    В общем застрял конкретно. Не знаю что и делать теперь.
    Все готовые решения из сети не работают.

    в ссылке https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=http://localhost%3A4567%2Foauth2callback&client_id=1081633247003-66876p4uam9n3a7atj115qcn2auh65de.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&access_type=offline&approval_prompt=force

    Локалхост я так думаю что в гугле так задумано
    Вот тут можно почитать https://developers.google.com/+/quickstart/php?hl=ru
     
    Последнее редактирование модератором: 23 ноя 2014
  6. DonPrus

    DonPrus Писатель

    Регистр.:
    28 июл 2014
    Сообщения:
    9
    Симпатии:
    12
    Поддерживаю, не проблема чтобы работало на localhost, надо чтобы при переправлении открывалось именно то расположение, где и ваш скрипт.
    И redirect_uri=http://localhost сделайте, либо создайте ещё один локальный домен.

    Если делать как у них, то запускать надо с помощью следующей команды:

    php -S localhost:4567
     
    асс нравится это.
Статус темы:
Закрыта.