Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2009 17:54:13

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибки в Django OpenID

Поставил djopenid из примеров python-openid. Даю в consumer ссылку http://openidenabled.com/python-openid/trunk/examples/server/user/ и он мне показывает экранированную форму. Делаю повторный запрос и consumer перенаправляет на openidenabled.com.Там предлагается подтвердить, жму Yes(Allow) идет перенаправление и consumer мне сообщает: OpenID authentication failed. Invalid openid.mode: u'i'. Копался в исходниках но не понял суть проблемы. Подскажите пожалуйста решение.

OpenID сервер у меня локальный и нет возможности протестировать на внешних сайтах с поддержкой openid аутентификации. По этому поставил реализацию в Django(аутентификация на openidenabled.com проходит успешно). И здесь openid сервер пишит непонятную ошибку: Invalid OpenID Namespace u'h'. Я в затруднение. То ли ошибка в клиенте, то ли в сервере. Как это определить?



Офлайн

#2 Авг. 6, 2009 18:44:27

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибки в Django OpenID

Если вдруг поможет. Привожу ответы от моего и от openidenabled.com серверов. Здесь он должен спрашивать доверия сайта, с которого пришел запрос.

Ответ от моего сервера с ошибкой:

/endpoint/?
openid.identity=http%3A%2F%2Flocalhost%3A6666%2Fserver%2Fuser%2F&
openid.mode=checkid_setup&
openid.return_to=http%3A%2F%2Flocalhost%3A8000%2Faccount%2Fsignin%2Fcomplete%2F%3Fnext%3D%252Faccount%252F%26janrain_nonce%3D2009-08-06T15%253A32%253A50ZrW9GfK%26openid1_claimed_id%3Dhttp%253A%252F%252Flocalhost%253A6666%252Fserver%252Fuser%252F&
openid.sreg.optional=nickname%2Cemail&
openid.trust_root=http%3A%2F%2Flocalhost%3A8000%2F
Положительный ответ от openidenabled.com сервера
/endpoint/?
openid.assoc_handle=%7BHMAC-SHA1%7D%7B4a7ac33c%7D%7BfNYBuQ%3D%3D%7D&
openid.claimed_id=http%3A%2F%2Fopenidenabled.com%2Fpython-openid%2Ftrunk%2Fexamples%2Fserver%2Fuser%2F&
openid.identity=http%3A%2F%2Fopenidenabled.com%2Fpython-openid%2Ftrunk%2Fexamples%2Fserver%2Fuser%2F&
openid.mode=checkid_setup&
openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&
openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1&
openid.realm=http%3A%2F%2Flocalhost%3A8000%2F&
openid.return_to=http%3A%2F%2Flocalhost%3A8000%2Faccount%2Fsignin%2Fcomplete%2F%3Fnext%3D%252Faccount%252F%26janrain_nonce%3D2009-08-06T15%253A35%253A07ZoJ4I9s&
openid.sreg.optional=nickname%2Cemail



Офлайн

#3 Авг. 7, 2009 14:44:06

Naota
От:
Зарегистрирован: 2007-06-04
Сообщения: 197
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибки в Django OpenID

Основательно порылся в коде клиента и сервера. И нашел Функцию normalDict из djopenid.util.py(OpenID сервер).
Выглядит она так:

def normalDict(request_data):
"""
Converts a django request MutliValueDict (e.g., request.GET,
request.POST) into a standard python dict whose values are the
first value from each of the MultiValueDict's value lists. This
avoids the OpenID library's refusal to deal with dicts whose
values are lists, because in OpenID, each key in the query arg set
can have at most one value.
"""
return dict((k, v[0]) for k, v in request_data.iteritems())
Смысл этой операции я не понял и решил вернуть словарь с полными значениями. После этого мой сервер благополучно предложил подтвердить регистрацию, но при этом написал:
This request claims to be from http://localhost:8000/ but I have determined that it is a pack of lies. Beware, if you release information to them, they are likely to do unconscionable things with it, being the lying liars that they are.

Please tell the real http://localhost:8000/ that someone is trying to abuse your trust in their good name.

В английском я не силен, не очень понятно что он сказал.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version