Простая регистрация OpenID (sreg) и обмен атрибутами (топор)

Какая связь между OpenID sreg и расширениями ax? Как проверяющая сторона знает, какую из них запросить, или обе?

1 ответ

Решение

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...

К сожалению, делегирование идентификатора OpenID делает это довольно ненадежным. Пользователь может использовать метод обнаружения на основе HTML, который вообще не объявляет расширения, может иметь XRDS, который не включает в себя ту же информацию о расширении, что и поставщик, или XRDS, который когда-то был точным, но сейчас отсутствует даты.

Кроме того, даже если вы получаете XRDS, который рекламирует расширение AX, насколько я знаю, он не говорит вам, какие атрибуты поддерживает поставщик (то есть какая схема AX).

Наиболее практичный подход, вероятно, заключается в том, чтобы запросить много материала, и если вы получите что-то обратно, вы можете использовать его.

Другие вопросы по тегам