-
Поставил 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'. Я в затруднение. То ли ошибка в клиенте, то ли в сервере. Как это определить?
Django 1.0.2-r1
python-openid 2.2.1 -
Обновил Django(до 1.1) и python-openid(до 2.2.4). Результат тот же :-(.
-
Если вдруг поможет. Привожу ответы от моего и от openidenabled.com серверов. Здесь он должен спрашивать доверия сайта, с которого пришел запрос.
Ответ от моего сервера с ошибкой:
Положительный ответ от openidenabled.com сервера/endpoint/?
openid.claimed_id=http%3A%2F%2Flocalhost%3A8001%2Fserver%2Fuser%2F&
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/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 -
Откровенно говоря, не очень понятно что и как вы тестируете. Но что происходит, если натравить локальный сервер на локальный консьюмер из поставки python-openid?
-
Клиент - http://code.google.com/p/django-authopenid/
Сервер из примеров http://openidenabled.com/python-openid/
Клиент отлично работает с внешними OpenID серверами, но не с моим. Мой сервер всегда выдает ошибки :(.
Травить не получается, как я понял из-за того, что джанговский веб-сервер поддерживает только одно соединение. Но я создал дубликат сервера и натравил их друг на друга. Consumer снова выводит экранированную форму, снова я обновляю страницу и уже второй сервер пишет мне ошибку: Unrecognized OpenID mode u'c'. Уже что-то новое. Что значит в ошибках последнее слово с буковкой?
Видимо придется рыться в спецификации 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.
В английском я не силен, не очень понятно что он сказал.
Consumer то же заработал. -
Вроде разобрался. Всем спасибо.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

