繁体   English   中英

使用 OpenID+OAuth (google) 获取访问令牌和密码

[英]Get access token and secret using OpenID+OAuth (google)

我将OAuth 与联合登录(混合协议)一起使用,以允许我的用户使用 openID 登录一次(效果很好),并同时使用 Google 数据 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 的要求,但它不起作用。

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

没有错。 实际上,当您执行混合流程时,不会发送验证者,只是因为您不需要它。

因此,在您的代码中,只需将验证程序设置为 NULL,只要其他地方没有问题,它应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM