我正在尝试实施Google的OpenID+OAuth协议,当openid.realm包含通配符时它不起作用:
openid.realm: http://*.example.com
openid.ns.oauth = http://specs.openid.net/extensions/oauth/1.0
openid.oauth.consumer = www.example.com
openid.oauth.scope = https://www.googleapis.com/auth/userinfo.profile
OpenID流程按预期工作,但OAuth扩展名被静默忽略(响应中没有request_token;也没有错误)。
根据documentation,这似乎得到了支持:
使用自动界面注册您的域名,请记住 注册域必须与realm参数一致 与OpenID一起使用。例如,域名“www.somedomain.com” 与“http://*.somedomain.com”的领域一致。
它适用于http://www.example.com
领域(回调接收request_token参数),但我无法更改领域,因为这会阻止现有用户再次登录。
我做错了什么?
答案 0 :(得分:0)
consumer
必须是实际的域名,而不是通配符。此外,*.example.com
指定了example.com
的子域名; example.com
不与http://*.example.com
Goggle文档不清楚,但您可能需要register your website with Google才能将OpenID + OAuth与通配符域一起使用。正如您所看到的,JohnS能够让OpenID+OAuth with a wildcard domain处理与您的设置存在的任何记录差异(除了使用ex2
而不是ouath
作为命名空间别名,这无关紧要)。
答案 1 :(得分:-1)
您的问题特别针对带有通配符选项的openid.realm:
标识要求最终用户信任的域。 (例如:“http://*.myexamplesite.com”)此值必须与openid.return_to 中定义的域一致。如果未定义此参数,Google将使用openid.return_to中引用的网址。
在Google联合登录页面上使用领域的价值来识别用户的请求站点。它还用于确定Google返回的持久用户ID的值。
注意:如果您一直使用OpenID和OAuth,只要OpenID领域参数值与之匹配,您就可以使用 相同的域名注册OAuth使用者参数值 。如果值不匹配,请重新注册与OpenID域值一致的域,或更改域的值。但是,如果现有用户使用OpenID,则更改域可能不是一个可行的选项。
关于 OAuth扩展的另一个重要事项:
这通常是DNS域名。必须与领域的值一致(例如,realm = example.com和ext2.consumer =“www.example.com”,或者realm =“http:// * 。 somedomain.com“和ext2.consumer =”www.somedomain.com“)。