Получить токен доступа и секрет с помощью OpenID + OAuth (Google) - PullRequest
1 голос
/ 29 мая 2011

Я использую OAuth с федеративным входом в систему (гибридный протокол) , чтобы разрешить моим пользователям входить в систему один раз с использованием openID (что прекрасно работает) и одновременно проходить аутентификацию с помощью Google Data API.

Библиотека Zend_GData доставляла мне головную боль, поэтому по предложению кого-то здесь, на SO, я переключился на LightOpenID .

Часть openID прекрасно работает, и благодаря this tip Я могу добавить расширение OAuth и получить ответ, подобный следующему:

 http://www.example.com/checkauth
 ?openid.ns=http://specs.openid.net/auth/2.0
 &openid.mode=id_res
 &openid.op_endpoint=https://www.google.com/accounts/o8/ud
 &openid.response_nonce=2009-01-17T00:11:20ZlJAgbeXUfSSSEA
 &openid.return_to=http://www.example.com/checkauth
 &openid.assoc_handle=AOQobUeYs1o3pBTDPsLFdA9AcGKlH
 &openid.signed=op_endpoint,claimed_id,identity,return_to,response_nonce,assoc_handle,ns.ext2,ext2.consumer,ext2.scope,ext2.request_token
 &openid.sig=oPvRr++f6%2ul/2ah2nOTg=
 &openid.identity=https://www.google.com/accounts/o8/id/id=AItOawl27F2M92ry4jTdjiVx06tuFNA
 &openid.claimed_id=https://www.google.com/accounts/o8/id/id=AItOawl27F2M92ry4jTdjiVx06tuFNA
 &openid.ns.oauth=http://specs.openid.net/extensions/oauth/1.0
 &openid.oauth.scope=http://docs.google.com/feeds/+http://spreadsheets.google.com/feeds/+http://sandbox.gmodules.com/api/
 &openid.oauth.request_token=1/fVr0jVubFA83GjYUA 

Согласно документации, openid.oauth.request_token является авторизованным токеном запроса, поэтому, похоже, я нене нужно делать запрос OAuthAuthorizeToken.Пока все хорошо, но теперь мне нужно обменять этот токен запроса на токен доступа и секрет токена.

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

// Build the request-URL...
$result = $oauth->sign(array(
    'path' => 'https://www.google.com/accounts/OAuthGetAccessToken',
    'parameters' => array(
        'oauth_verifier' => $_GET['oauth_verifier'],
        'oauth_token' => $_GET['oauth_token']),
    'signatures' => $signatures));

Требуется значение oauth_verifier, которое вы получите вместе с токеном запроса с обычным запросом OAuth.Я не уверен, что это библиотека OAuthSimple, которая выдает ошибку при попытке ее пропустить или это требование Google, но она не работает.

ТАК, может кто-то заметит, что я здесь что-то не так делаю

1 Ответ

0 голосов
/ 10 октября 2011

В этом нет ничего плохого. На самом деле, когда вы выполняете гибридный процесс, верификатор не отправляется просто потому, что он вам не нужен.

Итак, в вашем коде просто установите для верификатора значение NULL, и оно должно работать нормально, если в другом месте нет проблем.

...