Php 使用OpenID+;获取访问令牌和密码;OAuth(谷歌)

Php 使用OpenID+;获取访问令牌和密码;OAuth(谷歌),php,oauth,openid,lightopenid,Php,Oauth,Openid,Lightopenid,我使用它允许我的用户使用openID登录一次(这非常有效),同时使用Google数据API进行身份验证 Zend_GData图书馆让我头疼,所以在这里有人的建议下,我换了 openID部分工作得很好,感谢tip,我能够添加OAuth扩展并收到如下响应: http://www.example.com/checkauth ?openid.ns=http://specs.openid.net/auth/2.0 &openid.mode=id_res &openid.op_end

我使用它允许我的用户使用openID登录一次(这非常有效),同时使用Google数据API进行身份验证

Zend_GData图书馆让我头疼,所以在这里有人的建议下,我换了

openID部分工作得很好,感谢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\u令牌
是一个授权的请求令牌,因此我似乎不需要执行
oauthorizetoken
请求。到目前为止一切都很好,但现在我需要将此请求令牌交换为访问令牌和令牌密钥

因为我不知道如何生成OAuth nonce和签名,所以我使用了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\u验证器
值,该值将与普通oauth请求的请求令牌一起接收。我不确定是OAuthSimple库在试图忽略它时出错,还是Google要求出错,但它不起作用


那么,有人能在这里发现我做错了什么吗?

没什么错。实际上,当你做一个混合过程时,验证器不会被发送,只是因为你不需要它

所以在您的代码中,只需将verifier设置为NULL,只要其他地方没有问题,它就可以正常工作