OpenID简单注册(sreg)与属性交换(ax)

joe*_*ker 10 openid sreg

OpenID sreg和ax扩展之间有什么关系?依赖方如何知道请求哪一个,或两者兼而有之?

ket*_*urn 17

sreg被写成可能可行的最简单的东西,并且可用的字段非常有限.但是,因为那包括nickname,email而且fullname,这通常是你所需要的.

属性交换更具可扩展性和特征性,但我怀疑在实践中,诸如update_url和存储请求之类的功能尚未广泛实现.

至于知道要请求的内容:理论上,在发现阶段可用的XRDS文档中记录了提供者支持的扩展,如规范的扩展部分所述.如果您正在使用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...
Run Code Online (Sandbox Code Playgroud)

不幸的是,OpenID标识符委派使得它非常不可靠.用户可能正在使用基于HTML的发现方法,该方法根本不公布扩展,可能具有不包含与提供者相同的扩展信息的XRDS,或者曾经准确但现在已经出现的XRDS约会

此外,即使您确实获得了宣传AX扩展的XRDS,据我所知,它并没有告诉您提供商支持哪些属性(即哪个AX架构).

最实用的方法可能是要求很多东西,如果你得到一些东西,你可以使用它.