2013-12-03 4 views
1

Я выполнил этот урок (http://blog.jachobsen.com/2013/08/10/google-oauth2-in-android-with-rails-backend/), чтобы создать андроидную часть аутентификации oauth2. В конце он предоставляет Rails часть кода для сервера, но я не очень хорошо разбираюсь в Rails и поэтому не слишком уверен, как это сделать.PHP Google OAuth2 Backend для Android

Кто-нибудь знает, как я мог бы создать нечто похожее, но с PHP вместо этого? Я посмотрел на это https://code.google.com/p/google-api-php-client/, но мне не удалось отредактировать код, чтобы получить токен доступа, проверить, является ли он действительным, а затем вернуть ключ API.

Большое спасибо, Даниэль

ответ

2

РНР образец вы смотрите на это не последняя для Google+/authroization. Вы должны начать с последнего содержания в документации Google+:

Google+ PHP Quickstart

Quickstart показывает, как авторизовать клиента и передать полномочия на ваш PHP бэкэнд для вызовов API.

Если ваш сервер не запускает Phar, вы можете начать с кода примера из связанного вами файла PHP client library page и можете его обновить, чтобы выполнить обмен кодами на основе кода, переданного вашему Android-приложению, или авторизации пользователя с помощью доступ к токену/авторизационному коду из Интернета.

Следующий пример выполняет обмен кода для веб (как это делается в/подключении конечной точки в образце быстрого старта):

<?php 
require_once 'google-api-php-client/src/Google_Client.php'; 
require_once 'google-api-php-client/src/contrib/Google_PlusService.php'; 

// Set your cached access token. Remember to replace $_SESSION with a 
// real database or memcached. 
session_start(); 

$client = new Google_Client(); 
$client->setApplicationName('Google+ PHP Starter Application'); 
// Visit https://code.google.com/apis/console?api=plus to generate your 
// client id, client secret, and to register your redirect uri. 
$client->setClientId('YOUR_CLIENT_ID'); 
$client->setClientSecret('YOUR_CLIENT_SECRET'); 
$client->setDeveloperKey('YOUR_SIMPLE_API_KEY'); 

$plus = new Google_PlusService($client); 

if (isset($_GET['webcode'])) { 
    $client->setRedirectUri('postmessage'); 
    $client->authenticate($_GET['webcode']); 
    $_SESSION['token'] = $client->getAccessToken(); 

    $activities = $plus->activities->listActivities('me', 'public'); 
    print 'Your Activities: <pre>' . print_r($activities, true) . '</pre>'; 
} 

Чтобы увидеть код работу, вам нужно будет генерировать код из веб-клиент:

<!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"> 
<head> 
    <title></title> 
</head> 
<body> 
<span id="signinButton"> 
<span 
     class="g-signin" 
     data-callback="signinCallback" 
     data-clientid="YOUR_CLIENT_ID" 
     data-cookiepolicy="single_host_origin" 
     data-requestvisibleactions="http://schemas.google.com/AddActivity" 
     data-scope="https://www.googleapis.com/auth/plus.login"> 
    </span> 
    </span> 
    <table> 
    <tr> 
     <th>Code</th><th>ID Token</th><th>Access token</th> 
    </tr> 
    <tr> 
     <td><textarea id="code"></textarea></td> 
     <td><textarea id="idtok"></textarea></td> 
     <td><textarea id="atok"></textarea></td> 
    </tr> 
    </table> 

    <script type="text/javascript"> 
     (function() { 
      var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; 
      po.src = 'https://apis.google.com/js/client:plusone.js'; 
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); 
     })(); 

     function signinCallback(resp) { 
      console.log(resp); 
      document.getElementById('code').value = resp.code; 
      document.getElementById('idtok').value = resp.id_token; 
      document.getElementById('atok').value = resp.access_token; 
     } 
    </script> 
</body> 
</html> 

И затем передаст его скрипту php в качестве параметра веб-кода. Я создал демо, который работает от wheresgus.com/phptest/stackdemo.php и вы можете сгенерировать код из http://wheresgus.com/phptest/gencode.html

Пример ПОЛУЧИТЬ будет выглядеть следующим образом:

http://wheresgus.com/phptest/stackdemo.php?webcode=4/ajfCXQiZo-zRBAJGktP_eSYRha2s.YiEFJjWUiW4bEnp6UAPFm0GQNJMGhgI 

На практике, вы должны размещать свой код через HTTPS; но чтобы вы начали, надеюсь, это помогает.

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

  • Безопасно передать идентификатор маркера для приложения
  • Убедитесь, что маркер является действительным, и принадлежит к правильному приложению
  • Используйте подполе, чтобы определить ваш пользователь

следующий код показывает функцию в том же приложении, которое проверяет маркер и использует простой доступ API для выполнения activi ties.list для подписанного в систему пользователя:

if (isset($_GET['idtoken'])) { 
    $attributes = $client->verifyIdToken($_GET['idtoken'], CLIENT_ID) 
     ->getAttributes(); 
    $gplus_id = $attributes["payload"]["sub"]; 

    // At a minimum, make sure the token was for this app. 
    if ($attributes["payload"]["aud"] == $client->getClientId()){ 
    $activities = $plus->activities->listActivities($gplus_id, 'public'); 
    print 'Your Activities: <pre>' . print_r($activities, true) . '</pre>'; 
    }else{ 
    print 'Authorization failed.'; 
    } 
} 

Full code available here.

+0

Плотина, мой сервер не поддерживает композитора. – DVassilev

+0

Я посмотрю, есть ли альтернативный пример. Если нет, я мог бы собрать еще один пример. – class

+0

спасибо, это было бы очень признательно! – DVassilev

Смежные вопросы