2013-07-11 4 views
0

Я использую django-openid-provider (https://bitbucket.org/romke/django_openid_provider/), и перед его развертыванием на реальном сервере необходимо протестировать его функции. Я попытался построить запрос POST по документации OpenID 2.0 и отправить его на тестовый сервер django, чтобы получить токен openid.Тестирование django_openid_provider

Мой пост выглядит так:

http://192.168.232.151:8008/openid/ 

ТЕЛО:

openid.ns:http://specs.openid.net/auth/2.0 
openid.mode:associate 
openid.assoc_type:HMAC-SHA256 
openid.session_type:DH-SHA256 

Также я пытался представить его с помощью открытого ключа (например, openid.dh_modulus, openid.dh_gen, openid.dh_consumer_public) для алгоритма Диффи-Хеллмана и обнюхивания трафика аутентификации OpenID для получения дополнительных ключей в запросе, но все же получили 500 ошибок внутреннего сервера с

Exception Type: ProtocolError 
Exception Value:  
No mode value in message <openid.message.Message {('http://openid.net/signon/1.0', u'ns:http://specs.openid.net/auth/2.0\nopenid.mode:associate\nopenid.assoc_type:HMAC-SHA256\nopenid.session_type:DH-SHA256'): u'DH-SHA256EABv%252BfEoZlgh%252BeU71rlInEppkiuX\nopenid.dh_modulus:ANz5OguIOXLsDhmYmsWizjEOHTdxfo2Vcbt2I3MYZuYe91ouJ4mLBX%2BYkcLiemOcPym2CBRYHNOyyjmG0mg3BVd9RcLn5S3IHHoXGHblzqdLFEi%2F368Ygo79JRnxTkXjgmY0rxlJ5bU1zIKaSDuKdiI%2BXUkKJX8Fvf8W8vsixYOr\nopenid.dh_gen:Ag%3D%3D\nopenid.dh_consumer_public:AJs12O5ypo2N%2FL0RJiiOgu9llg2dFsnjthyH49dx6FXz52iDXNkS7gquOm6KEr%2BUfTmktyVMA5DrZwJ%2BrX1jk7sKmXJMmi9%2B7N5fa0wvz%2Fi6nrvg8Oqw31kh%2BtbD9ansUeATSlCfUoRCqeUHEABv%2BfEoZlgh%2BeU71rlInEppkiuX'}> 

Отладка Джанго-модуль OpenID я обнаружил, что строительство объекта сообщение вызывает эту ошибку, но не может найти значения параметров, чтобы удовлетворить сервер

-провайдер OpenID Пожалуйста, покажите мне, что я делаю неправильно? Я выбираю жесткий путь, могу ли я использовать что-то, что эмулирует потребительский сайт с openid-клиентом локально. Или, может быть, у кого-то есть правильный пример такого запроса POST?

ответ

0

Возможно, вам лучше всего использовать общедоступный пользователь OpenID или клиентскую библиотеку OpenID для тестирования django-openid-provider, поскольку создание запроса OpenID вручную неудобно.

В прошлом я использовал mod_auth_openid (модуль Apache) для тестирования с django_openid_provider, он работает хорошо.

Если вы действительно намерены предоставления HTTP запросов в отношении конечной точки OpenID вручную:

OpenID использует GET запросов, а не POST запросов.

Параметры должны передаваться в строке запроса, а не в теле.

Использование httpie, вот пример действительного запроса от провайдера OpenID, при условии:

  • Конечного OpenID является http://192.168.232.151:8008/openid/
  • Вы использовали Джанго-OpenId-провайдер, чтобы создать OpenID под названием myopenid
  • OpenID потребитель (ретрансляция партия) является http://www.example.com/protected/
  • потребитель OpenID защищен с помощью mod_auth_openid

Вот первоначальный запрос:

$ http get http://192.168.232.151:8008/openid/ \ 
openid.assoc_handle=={HMAC-SHA256}{42a4370e}{G804lQ====} \ 
openid.claimed_id==http://192.168.232.151:8008/openid/myopenid/ \ 
openid.identity==http://192.168.232.151:8008/openid/myopenid/ \ 
openid.mode==checkid_setup \ 
openid.ns==http://specs.openid.net/auth/2.0 \ 
openid.realm==http://www.example.com/protected/ \ 
openid.return_to==http://www.example.com/protected/?modauthopenid.nonce=qAgqlNCdLl \ 
openid.trust_root==http://www.example.com/protected/ 

Это эквивалентно:

$ curl http://192.168.232.151:8008/openid/?openid.assoc_handle=%7BHMAC-SHA256%7D%7B42a4370e%7D%7BG804lQ%3D%3D%3D%3D%7D&openid.claimed_id=http%3A%2F%2F192.168.232.151%3A8008%2Fopenid%2Fmyopenid%2F&openid.identity=http%3A%2F%2F192.168.232.151%3A8008%2Fopenid%2Fmyopenid%2F&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.realm=http%3A%2F%2Fwww.example.com%2Fprotected%2F&openid.return_to=http%3A%2F%2Fwww.example.com%2Fprotected%2F%3Fmodauthopenid.nonce%3DqAgqlNCdLl&openid.trust_root=http%3A%2F%2Fwww.example.com%2Fprotected%2F 

Обратите внимание, что openid.assoc_handle и modauthopenid.nonce значения не являются действительными в данном примере, вы должны произвести надлежащее значения для них.

Если это удастся, сервер должен перенаправить вас через 302 на http://www.example.com/protected/ с рядом аргументов параметров запроса.

Также обратите внимание, что это только первый шаг в протоколе, есть дополнительные запросы.

Но вы действительно не хотите вручную обрабатывать эти запросы OpenID HTTP. Вместо этого используйте библиотеку OpenID или пользователь OpenID.