在使用openid进行身份验证时,我应该使用claimed identifier作为唯一标识特定用户的密钥。我遇到的问题要么是两个独立的bug,要么是对规范的误解:)。
当使用node openid时,我希望这两个url产生相同的声明id:
http://{username}.myopenid.com网站/
http://www.myopenid.com/xrds?username={username}.myopenid.com网站
但是,这些URL会导致两个不同的声明ID:
http://{username}.myopenid.com网站/
http://www.myopenid.com/xrds?username={username}.myopenid.com网站
都是上面提到的网址。为了验证这种行为,我决定查看另一个openid库,Python OpenID。使用相同的两个URL,我仍然会得到两个声明的ID,但在本例中它们是不同的,现在我得到:
http://{username}.myopenid.com网站/
http://{username}.myopenid.com/xrds
所以,我想我的问题是,我是否正确地假设声明的\u id应该用作标识符,并且上面的url应该产生相同的声明的\u id?
最佳答案
他们没有理由得到同样的身份证,事实上你也没有提供任何证据来支持这种期望。
但是,应该注意的是,第一个库对声明的id使用了错误的值(emphasis mine):
7.2条。标准化
最终用户的输入必须规范化为标识符,如下所示:
(…)
4.然后,在检索URL标识符的内容(…)时,必须在重定向之后通过(…)进一步规范化它们。
对于第二个url,您有此响应(删除了一些头):
> GET /xrds?username=cataphract.myopenid.com HTTP/1.1
> Host: www.myopenid.com
> Accept: application/xrds+xml
>
< HTTP/1.1 301 Moved Permanently
< Location: http://cataphract.myopenid.com/xrds
因此,应使用
http://{username}.myopenid.com/xrds
。