3

我正在尝试实现 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;也没有错误)。

根据文档,这似乎得到了支持:

使用自动化界面注册您的域,记住注册的域必须与 OpenID 使用的领域参数一致。例如,域“www.somedomain.com”与域“http://*.somedomain.com”一致。

它适用于http://www.example.com(回调接收 request_token 参数)的领域,但是我无法更改领域,因为这会阻止现有用户再次登录。

我究竟做错了什么 ?

4

2 回答 2

0

consumer必须是实际域名,而不是通配符。此外,*.example.com指定example.com;的子域 example.com不符合_http://*.example.com

Goggle 文档不清楚,但您可能需要向Google 注册您的网站才能将 OpenID+OAuth 与通配符域一起使用。如您所见,JohnS能够使用通配符域获得 OpenID+OAuth,而与您的设置没有任何记录的差异(除了使用ex2而不是ouath作为命名空间别名,但这无关紧要)。

于 2013-05-24T17:01:16.743 回答
-1

您的问题专门针对带有通配符选项的 openid.realm :

认证领域。

标识最终用户被要求信任的域。(示例:“http://*.myexamplesite.com”)该值必须与 openid.return_to 中定义的域一致。如果未定义此参数,Google 将使用 openid.return_to 中引用的 URL。

在 Google 联合登录页面上使用 realm 的值来向用户识别请求站点。它还用于确定 Google 返回的持久用户 ID 的值。

注意:如果您一直分别使用 OpenID 和 OAuth,则只要 OpenID 领域参数值与 OAuth 消费者参数值匹配,您就可以使用相同的域注册。如果值不匹配,请重新注册与 OpenID 领域值一致的域,或更改领域的值。但是,如果现有用户使用 OpenID,则更改领域可能不是一个可行的选择。

关于OAuth 扩展的另一件重要的事情:

这通常是 DNS 域名。必须与 realm 的值一致(例如,realm = example.com and ext2.consumer = "www.example.com",或 realm = "http:// * .somedomain.com " and ext2.consumer = " www.somedomain.com”)。

于 2013-05-28T09:57:50.030 回答