当使用 OpenID 进行身份验证时,我应该使用 claimed identifier作为唯一标识特定用户的 key 。我遇到的问题是两个独立的错误或对规范的误解 :)。
使用 node openid 时我希望这两个 URL 产生相同的 claimed_id:
- http://{用户名}.myopenid.com/
- http://www.myopenid.com/xrds?username= {用户名}.myopenid.com
但是,这些 URL 会产生两个不同的 claimed_ids:
- http://{用户名}.myopenid.com/
- http://www.myopenid.com/xrds?username= {用户名}.myopenid.com
两者都是提到的 URL。为了验证这种行为,我决定检查一个不同的 OpenID 库,Python OpenID .使用相同的两个 URL,我仍然得到两个 claimed_id,但在这种情况下它们是不同的,现在我得到:
- http://{用户名}.myopenid.com/
- http://{用户名}.myopenid.com/xrds
因此,我想我的问题是,我假设 claimed_ids 应该 用作标识符并且上述 URL 应该 产生相同的 claimed_id 是否正确?
最佳答案
他们没有理由产生相同的声明 ID,事实上您没有提供任何东西来支持这种期望。
但是,应该注意的是,第一个库对声明的 id 使用了错误的值(强调我的):
7.2. Normalization
The end user's input MUST be normalized into an Identifier, as follows :
(...)
4. URL Identifiers MUST then be further normalized by (...) following redirects when retrieving their content (...).
对于第二个 URL,您有此响应(删除了一些 header ):
> 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
。
关于python - OpenID 声明的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7493245/