OpenID和OAuth无法正常工作

时间:2012-08-03 01:44:45

标签: oauth openid

googlecodesamples的以下链接正在运行。

注意:由于我只能有2个链接,所以我无法指向我的来源

问题stackover google-hybrid-openidoauth-login-not-prompting-for-oauth-access

和developers_google_com / accounts / docs / OpenID

https://accounts.google.com/o/openid2/auth?openid.ns=http://specs.openid.net/auth/2.0
&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select
&openid.identity=http://specs.openid.net/auth/2.0/identifier_select
&openid.return_to=http://googlecodesamples.com/hybrid/index.php
&openid.realm=http://googlecodesamples.com&openid.mode=checkid_setup
&openid.ns.ui=http://specs.openid.net/extensions/ui/1.0
&openid.ns.ext1=http://openid.net/srv/ax/1.0
&openid.ext1.mode=fetch_request
&openid.ext1.type.email=http://axschema.org/contact/email
&openid.ext1.type.first=http://axschema.org/namePerson/first
&openid.ext1.type.last=http://axschema.org/namePerson/last
&openid.ext1.required=email,first,last
&openid.ns.oauth=http://specs.openid.net/extensions/oauth/1.0
&openid.oauth.consumer=googlecodesamples.com
&openid.oauth.scope=http://www.google.com/m8/feeds/

以上link

它会带您进行登录/确认并返回空白页面,但回复网址的正确如下:

http://googlecodesamples.com/hybrid/index.php?
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=2012-08-02T22:51:28ZNuhXnuA5P14fcg
openid.return_to=http://googlecodesamples.com/hybrid/index.php
openid.assoc_handle=AMlYA9XA_khrLenZI2mnUwkI1PWV-7ERMRXskVzs_nlFhq87rO0iowVL
openid.signed=op_endpoint,claimed_id,identity,return_to,response_nonce,
  assoc_handle,ns.ext1,ns.ext2,ext1.mode,ext1.type.first,ext1.value.first,
  ext1.type.email,ext1.value.email,ext1.type.last,ext1.value.last,ext2.scope,
  ext2.request_token
openid.sig=JFoYU7PM4GoKBODmLyMtip5q7x4=
openid.identity=https://www.google.com/accounts/o8/id?id=AItOawlvAimmJ5_y6-gMro7Xyl75LXMC7jYCkiA
openid.claimed_id=https://www.google.com/accounts/o8/id?id=AItOawlvAimmJ5_y6-gMro7Xyl75LXMC7jYCkiA
openid.ns.ext1=http://openid.net/srv/ax/1.0
openid.ext1.mode=fetch_response
openid.ext1.type.first=http://axschema.org/namePerson/first
openid.ext1.value.first=nico
openid.ext1.type.email=http://axschema.org/contact/email
openid.ext1.value.email=nico.gtest@gmail.com
openid.ext1.type.last=http://axschema.org/namePerson/last
openid.ext1.value.last=gtest
openid.ns.ext2=http://specs.openid.net/extensions/oauth/1.0
openid.ext2.scope=http://www.google.com/m8/feeds/
openid.ext2.request_token=4/vAQqXlNILhAC0KCIBS2xlhtpo0IT.4lllxzFP7ncSgrKXntQAax2gXBbTcQI

其中重要的部分是回复中出现 openid.ext2.request_token 女巫

但如果我将链接更改为我的信息,则回复中没有任何oauth字段

https://accounts.google.com/o/openid2/auth?openid.ns=http://specs.openid.net/auth/2.0
&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select
&openid.identity=http://specs.openid.net/auth/2.0/identifier_select
&openid.return_to=http://dev.oncrm.co.za:9004/gauthapp/myserv?test_v=verify_dbug
&openid.realm=http://dev.oncrm.co.za:9004
&openid.mode=checkid_setup
&openid.ns.ui=http://specs.openid.net/extensions/ui/1.0
&openid.ns.ext1=http://openid.net/srv/ax/1.0
&openid.ext1.mode=fetch_request
&openid.ext1.type.email=http://axschema.org/contact/email
&openid.ext1.type.first=http://axschema.org/namePerson/first
&openid.ext1.type.last=http://axschema.org/namePerson/last
&openid.ext1.required=email,first,last
&openid.ns.oauth=http://specs.openid.net/extensions/oauth/1.0
&openid.oauth.consumer=dev.oncrm.co.za:9004
&openid.oauth.scope=http://www.google.com/m8/feeds/

以上link

我已在google console

注册了我的域名

创建了客户端ID和客户端密钥,未在任何样本的url中使用???

启用所有API服务

openid.realm == openid.oauth.consumer 与示例相同

openID部分有效,但无法让google返回 openid.ext2.request_token ,所以我可以继续请求access_token

我还使用了openid4java API(带有oauth扩展,问题110),在oauth上没有成功

问题

a)为什么我的链接不起作用,我还必须做什么

b)如果未使用客户端ID和客户端密码,那么它的概念是什么

c)参数:openid.ns.oauth = http://specs.openid.net/extensions/oauth/1.0    也是烦我的,是在oauth1.0或oauth2.0上工作的openID + OAuth

请感谢任何帮助

感谢nico

3 个答案:

答案 0 :(得分:0)

我在文档中没有看到Google声明OpenId + OAuth可以与OAuth 2.0一起使用。他们所有的文档都指向1.0 OAuth,我没有看到谷歌的任何声明说它适用于2.0。

答案 1 :(得分:0)

正如Mark所说,你不能使用OAuth 2.0进行OpenID + OAuth,只能使用1.0。我认为1.0将适用于您要求的范围,如果它意味着为用户取消第二个授权步骤,则可能值得使用2.0以上。

假设1.0适用于您,我认为您的链接问题是您需要使用Google的“管理域名”工具(https://accounts.google.com/ManageDomains)注册您的域名,而不是API控制台。据我所知,API控制台专门用于OAuth 2.0。

假设我的预感是正确的,那回答(a)和(c),尽管是相反的顺序。至于(b),我认为客户端ID仅在OAuth 2.0中使用。存在于1.0和2.0中的客户机密钥用于签署对访问令牌的请求,您在收到请求令牌后执行此操作。因此,过程是:(1)获取请求令牌(可以作为OpenID身份验证的一部分完成),(2)访问令牌的交换请求令牌,(3)使用访问令牌来调用API。

希望这能回答你的问题,但如果没有,请告诉我(或者如果我在任何地方偏离基地)。我自己过去几天一直在和这些东西摔跤,并且有兴趣听听你的表现。

答案 2 :(得分:0)

我设法使用以下API和配置

a)使用(https://accounts.google.com/ManageDomains)设置域并使用(https://developers.google.com/gdata/docs/auth/oauth)创建和上传X.509证书

b)带有oauth扩展的API openid4java(问题110)

c)资源&样品

OAuthExample.java from gdata-samples.java-1.47.1
ConsumerServlet.java from openid4java
Sample.java from issue 110

d)使用 OAuthRsaSha1Signer 进行签名(来自a。上传X.509证书),然后OAuthHmacSha1Signer不需要oauthReqTokenSecret或accessTokenSecret

e)还需要使用ContactsService进行签名

对OAuth1的弃用仍有疑虑,如果等待openid与OAuth2合作不是更好

  

任何人都知道什么时候会是????