还有另一种可能的解决方法。在进行间接身份验证请求(重定向到服务URI)时,即使领域设置为新领域,也将旧 OpenID URL 作为openid.claimed_id
和openid.identity
参数的值发送。
在我的开发机器上,我将域“thiscomputer”别名为127.0.0.1。当我从Google的OpenID提供程序请求身份验证时,领域为“http://thiscomputer”,openid.identity
和openid.claimed_id
都设置为http://specs.openid.net/auth/2.0/identifier_select
,我得到了如下返回:
https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ
然后我向OP请求身份验证,领域为'http://localhost',openid.identity
和openid.claimed_id
都设置为http://specs.openid.net/auth/2.0/identifier_select
。我得到了如下返回结果:
https://www.google.com/accounts/o8/id?id=VGwSBXNwzPQk-puNdfZl4tP-s7JNHPA3WmMHozHJ
然后我向OP请求身份验证,领域为'http://localhost',openid.identity
和openid.claimed_id
都设置为https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ
(当领域为'http://thiscomputer'时,这是我的Google帐户的OpenID身份)。 我得到了以下回复:
https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ
也就是说,当领域为'http://thiscomputer'时,我得到了与之前相同的OpenID身份URL。因此,即使我将依赖OpenID的Web应用程序从'thiscomputer'迁移到'localhost',我仍然可以使用旧的OpenID身份URL。
只要您知道用户的旧OpenID身份URL(例如存储在cookie中),此解决方案就可以正常工作。
注意:我尝试将openid.identity
和openid.claimed_id
设置为不同的值(例如,一个是http://specs.openid.net/auth/2.0/identifier_select
,而另一个是https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ
或者一个是https://www.google.com/accounts/o8/id?id=VGwSBXN7Q00X4G9CTAsLPMJ3m6JaPljpkrURAUZJ
,而另一个是https://www.google.com/accounts/o8/id?id=VGwSBXNwzPQk-puNdfZl4tP-s7JNHPA3WmMHozHJ
),但Google的OP服务响应“您请求的页面无效。”