python-openid: サンプルが動かない件。

Rp=Ubuntu(rp.ubu) , Op=Debian(idp.deb) でdjopenidを試したがエラー。

KeyError at /server/endpoint/
"Cannot map u’h’ to alias u’sreg’. It is already mapped to alias u’ax’"Request Method:    POST
Request URL:    http://idp.deb/server/endpoint/
Exception Type:    KeyError
Exception Value:    "Cannot map u’h’ to alias u’sreg’. It is already mapped to alias u’ax’"
Exception Location:    /usr/lib/python2.5/site-packages/openid/message.py in addAlias, line 592
Python Executable:    /usr/bin/python
Python Version:    2.5.2
Python Path:    [‘/home/hdknr/python-openid-2.2.4/examples/djopenid’, ‘/usr/lib/python2.5/site-packages/yolk-0.4.1-py2.5.egg’, ‘/usr/lib/python2.5’, ‘/usr/lib/python2.5/plat-linux2’, ‘/usr/lib/python2.5/lib-tk’, ‘/usr/lib/python2.5/lib-dynload’, ‘/usr/local/lib/python2.5/site-packages’, ‘/usr/lib/python2.5/site-packages’, ‘/usr/lib/python2.5/site-packages/PIL’, ‘/var/lib/python-support/python2.5’]
Server time:    Thu, 25 Jun 2009 23:30:29 –0500

Auth Requesは、

<html>
  <body onload="document.getElementById(‘openid_message’).submit()">
  <form id="openid_message" action="http://idp.deb/server/endpoint/" method="post" accept-charset="UTF-8" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="openid.ax.if_available" value="ext1"/>
<input type="hidden" name="openid.mode" value="checkid_setup"/>
<input type="hidden" name="openid.ns" value="http://specs.openid.net/auth/2.0"/>
<input type="hidden" name="openid.realm" value="http://rp.ubu/consumer/"/>
<input type="hidden" name="openid.sreg.required" value="dob"/>
<input type="hidden" name="openid.return_to" value="http://rp.ubu/consumer/finish/?janrain_nonce=2009-06-26T04%3A28%3A30ZC2pcnn"/>
<input type="hidden" name="openid.ax.count.ext1" value="unlimited"/>
<input type="hidden" name="openid.ax.mode" value="fetch_request"/>
<input type="hidden" name="openid.sreg.optional" value="email,nickname"/>
<input type="hidden" name="openid.claimed_id" value="http://idp.deb/server/user/"/>
<input type="hidden" name="openid.ns.sreg" value="http://openid.net/extensions/sreg/1.1"/>
<input type="hidden" name="openid.ns.ax" value="
http://openid.net/srv/ax/1.0"/>
<input type="hidden" name="openid.identity" value="http://idp.deb/server/user/"/>
<input type="hidden" name="openid.ax.required" value="ext0"/>
<input type="hidden" name="openid.ax.type.ext0" value="
http://schema.openid.net/namePerson"/>
<input type="hidden" name="openid.ax.type.ext1" value="
http://schema.openid.net/contact/web/default"/>
<input type="submit" value="Continue"/></form>
  </body>
</html>

これは、サンプルがDjango0.9.4のため。このように対応

そうするとAuthRequestは通ったが、Auth Responseでエラー。

TypeError at /consumer/finish/

query dict must have one value for each key, not lists of values. Query is {’openid.op_endpoint’: [‘http://idp.deb/server/endpoint/’%5D, ‘openid.sig’: [‘ylh4WpavFZvHpnjMEgV+a09/EfY=’], ‘openid.ns.pape’: [‘http://specs.openid.net/extensions/pape/1.0’%5D, ‘openid.ns’: [‘http://specs.openid.net/auth/2.0’%5D, ‘janrain_nonce’: [‘2009-06-26T05:22:35Z5uhC5p’], ‘openid.return_to’: [‘http://rp.ubu/consumer/finish/?janrain_nonce=2009-06-26T05%3A22%3A35Z5uhC5p’%5D, ‘openid.pape.auth_level.nist’: [‘0’], ‘openid.sreg.dob’: [‘1970-01-01’], ‘openid.claimed_id’: [‘http://idp.deb/server/user/’%5D, ‘openid.ns.sreg’: [‘http://openid.net/extensions/sreg/1.1’%5D, ‘openid.sreg.nickname’: [‘example’], ‘openid.pape.auth_policies’: [‘http://schemas.openid.net/pape/policies/2007/06/none’%5D, ‘openid.response_nonce’: [‘2009-06-26T05:22:37Z2iLU7y’], ‘openid.signed’: [‘assoc_handle,claimed_id,identity,mode,ns,ns.pape,ns.sreg,op_endpoint,pape.auth_level.nist,pape.auth_level.ns.nist,pape.auth_policies,response_nonce,return_to,signed,sreg.dob,sreg.email,sreg.nickname’], ‘openid.pape.auth_level.ns.nist’: [‘http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf’%5D, ‘openid.assoc_handle’: [‘{HMAC-SHA1}{4a445b1a}{gOgyqg==}’], ‘openid.mode’: [‘id_res’], ‘openid.identity’: [‘http://idp.deb/server/user/’%5D, ‘openid.sreg.email’: [‘invalid@example.com’]}

Request Method:
GET

Request URL:
http://rp.ubu/consumer/finish/

Exception Type:
TypeError

Exception Value:
query dict must have one value for each key, not lists of values. Query is {’openid.op_endpoint’: [‘http://idp.deb/server/endpoint/’%5D, ‘openid.sig’: [‘ylh4WpavFZvHpnjMEgV+a09/EfY=’], ‘openid.ns.pape’: [‘http://specs.openid.net/extensions/pape/1.0’%5D, ‘openid.ns’: [‘http://specs.openid.net/auth/2.0’%5D, ‘janrain_nonce’: [‘2009-06-26T05:22:35Z5uhC5p’], ‘openid.return_to’: [‘http://rp.ubu/consumer/finish/?janrain_nonce=2009-06-26T05%3A22%3A35Z5uhC5p’%5D, ‘openid.pape.auth_level.nist’: [‘0’], ‘openid.sreg.dob’: [‘1970-01-01’], ‘openid.claimed_id’: [‘http://idp.deb/server/user/’%5D, ‘openid.ns.sreg’: [‘http://openid.net/extensions/sreg/1.1’%5D, ‘openid.sreg.nickname’: [‘example’], ‘openid.pape.auth_policies’: [‘http://schemas.openid.net/pape/policies/2007/06/none’%5D, ‘openid.response_nonce’: [‘2009-06-26T05:22:37Z2iLU7y’], ‘openid.signed’: [‘assoc_handle,claimed_id,identity,mode,ns,ns.pape,ns.sreg,op_endpoint,pape.auth_level.nist,pape.auth_level.ns.nist,pape.auth_policies,response_nonce,return_to,signed,sreg.dob,sreg.email,sreg.nickname’], ‘openid.pape.auth_level.ns.nist’: [‘http://csrc.nist.gov/publications/nistpubs/800-63/SP800-63V1_0_2.pdf’%5D, ‘openid.assoc_handle’: [‘{HMAC-SHA1}{4a445b1a}{gOgyqg==}’], ‘openid.mode’: [‘id_res’], ‘openid.identity’: [‘http://idp.deb/server/user/’%5D, ‘openid.sreg.email’: [‘invalid@example.com’]}

Exception Location:
/usr/lib/python2.5/site-packages/openid/message.py in fromPostArgs, line 154

つまり、これはAuth Requestのエラーのフィックスがだめな方に働いているようです。なので、実際はこのように直すと動きます。

hdknr@ubuntu-vbox:~/openid/python-openid-2.2.4/examples/djopenid$ vi util.py

def normalDict(request_data):
    l=lambda x : (isinstance(x,list) and len(x)>0 ) and x[0] or x
    return dict((k, l(v)) for k, v in request_data.iteritems())

これでいいかはまだわからんがとりあえずサンプルはRP(Ubuntu),OP(Debian)で動いた。

カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中