OpenID sreg与ax扩展之间有什么关系?依赖方如何知道请求哪一个,或两者都知道?
答案 0 :(得分:17)
sreg被写成可能有效的最简单的东西,并且可用的字段非常有限。但由于这包括nickname
,email
和fullname
,这通常都是您需要的。
属性交换具有更大的可扩展性和功能,但我怀疑在实践中,update_url
和商店请求等功能尚未广泛实施。
至于知道请求的内容:理论上,在发现阶段可用的XRDS文档中记录了提供者支持的扩展,如规范的Extensions部分所述。如果您正在使用python-openid(或者可能是 OpenID Enabled 中的其他库之一),您可以通过类似
的内容查询auth_req = consumer.begin('http://example.com/joe')
from openid.extensions import sreg
if sreg.supportsSreg(auth_req.endpoint):
sreg_request = sreg.SRegRequest(required=['nickname','email'])
auth_req.addExtension(sreg_request)
else:
# maybe AX, maybe something else...
不幸的是,OpenID标识符委派使得它非常不可靠。用户可能正在使用基于HTML的发现方法,该方法根本不公布扩展,可能具有不包含与提供者相同的扩展信息的XRDS,或者曾经准确但现在已经出现的XRDS约会。
此外,即使您确实获得了宣传AX扩展的XRDS,据我所知,它并没有告诉您提供商支持哪些属性(即哪个AX架构)。
最实用的方法可能是要求很多东西,如果你收回一些东西,就可以使用它。