1

Federated Login (Hybrid Protocol) で OAuth を使用して、ユーザーが openID を使用して 1 回ログインし (これはうまく機能します)、同時に Google Data API で認証できるようにしています。

Zend_GData ライブラリが頭を悩ませていたので、ここの誰かの提案で、LightOpenIDに切り替えました。

openID 部分はうまく機能します。このヒントのおかげで、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ナンスと署名を生成する方法がわからないので、php用のOAuthSimpleライブラリを採用しています。問題は、必要なコードが次のようになることです。

// 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 の要件なのかはわかりませんが、機能しません。

SO、誰かが私がここで間違っていることを見つけることができますか?

4

1 に答える 1

0

何も問題はありません。実際には、ハイブリッド プロセスを実行する場合、必要がないという理由だけでベリファイアは送信されません。

したがって、コードで verifier を NULL に設定するだけで、他の場所に問題がない限り、問題なく動作するはずです。

于 2011-10-10T08:05:48.540 に答える