OpenID sreg和ax扩展之间的关系是什么?依赖方如何知道请求哪一个,或者两者都请求?
发布于 2010-03-12 12:34:37
sreg是作为可能工作的最简单的东西编写的,并且可用字段的集合非常有限。但由于包括nickname、email和fullname,这通常就是您需要的全部内容。
属性交换的可扩展性和特性要强得多,尽管我怀疑像update_url和存储请求这样的特性在实践中还没有得到广泛的实现。
至于知道请求哪个扩展:理论上,提供者支持哪些扩展在发现阶段提供的XRDS文档中有记录,如规范的Extensions部分所述。如果您正在使用python-openid (或者可能是启用了OpenID的其他库之一),您可以通过下面这样的方式进行查询
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模式)。
最实用的方法可能是请求很多东西,如果你拿回了一些东西,你就可以使用它。
https://stackoverflow.com/questions/2422433
复制相似问题