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、誰かが私がここで間違っていることを見つけることができますか?