#1762 closed enhancement (fixed)
OpenIDのサーバ(プロバイダ)になれるようにする
Reported by: | kunitada | Owned by: | ogawa |
---|---|---|---|
Priority: | critical | Milestone: | OpenPNE2.12beta1 |
Component: | pne-masterslave | Version: | |
Keywords: | 親チケット | Cc: |
Description (last modified by )
■概要
■仕様
■関連情報
コミットは、 http://trac.openpne.jp/browser/OpenPNE/branches/prj/openid に行う
開発版最新TAGをsvn copyしたてください。
http://trac.openpne.jp/wiki/pne-openid-note
にも各種情報あり
Change History (37)
comment:1 Changed 14 years ago by
Summary: | OpenIDのサーバになれるようにする → OpenIDのサーバ(プロバイダ)になれるようにする |
---|
comment:2 Changed 14 years ago by
Description: | modified (diff) |
---|
comment:3 Changed 14 years ago by
Type: | enhancement → project |
---|
comment:4 Changed 14 years ago by
comment:6 Changed 14 years ago by
OpenIDの簡単な動作フローは以下のようになります。 ここで、OpenIDのプロバイダは以下の二つのページを用意する必要があります。
▽プロバイダが準備するページ ◆ユーザホーム これはh_homeをSNS外部に公開するためのページにあたります。 ただし、このページにユーザ情報を載せる必要はなく、必須なものは
<link rel="openid.server" href="http://sns.openpne.jp/?m=openid&a=page_auth" />
のように、次に説明する認証確認ページのURLを示すタグとなります。
◆認証確認ページ ページはOpenIDの認証時にそのOpenIDに認証を求めているサイトに許可を出すかどうかをユーザが選択するページとなります。 また、このURLは認証を求めるクライアントサイトとプロバイダサイトで通信認証を行うための共有キーなどの発行などにも利用されます。
▽ログインフロー ◆OpenIDでの認証を許可しているサイトでユーザが自身のユーザID(上記のユーザホームのURLがユーザIDとなる)を入力する。
◆認証を求められたサイトが入力されたユーザIDにアクセスし、認証確認ページのURLを取得し、ユーザに認証確認ページへリダイレクトさせる。(その際どのサイトからの認証か、またセキュリティのための確認情報などはGETパラメータで渡される)
◆認証確認ページでプロバイダが認証を求めるサイトに対し、ユーザに許可をするとかどうかを確認する。許可した場合、その情報をまたGETパラメータで持たせて認証を求めるサイトのURLにリダイレクトする。
◆プロバイダ側で許可されている場合、認証が成功したとみなしログイン処理を行う
comment:7 Changed 14 years ago by
▽デモ
wordpressの認証をopenidで行うデモを以下に設置しています。
◆OpenPNE(プロバイダ)
http://openid-demo.lily.pne.jp/
◆wordpress
http://wordpress-demo.lily.pne.jp/
OpenPNEのユーザを用いてwordpressで認証を行うことができます。OpenID用のユーザID(ホーム)は
http://openid-demo.lily.pne.jp/?m=openid&a=page_home&id=(メンバーID)
です。c_member_id=1の場合は
http://openid-demo.lily.pne.jp/?m=openid&a=page_home&id=1
となります。
このユーザIDを
http://wordpress-demo.lily.pne.jp/wp-login.php
の最下段のフォームに入れると認証ステップに入ります。
もしOpenPNEにログインしていない場合はログイン画面に飛ばされ、ログインすると認証ステップに戻ります。
ログインが成功した場合はblogでコメントつけるなどをすることで、ユーザIDがhttp://openid-demo.lily.pne.jp/?m=openid&a=page_home&id=(メンバーID)として認識されていることが分かると思います。
現状では認証機能の実装のみですが、ニックネームなどの情報を渡す拡張もあるようなので、その機能の実装によってhttp://openid-demo.lily.pne.jp/?m=openid&a=page_home&id=(メンバーID)以外のユーザIDとしてwordpressに登録できるのかもしれません。
comment:8 Changed 14 years ago by
上記のOpenIDのプロバイダ機能を実装したソースは
https://svn.openpne.jp/svn/OpenPNE/branches/prj/openid
にコミットしています。
ただし、OpenIDの動作をさせることを目的とした実装であるため、
◆認証画面のデザイン
◆ユーザIDのURLで表示されるユーザ情報
などは仕様が決定されていないため、必要最低限の実装になっています。
comment:9 Changed 14 years ago by
comment:10 Changed 14 years ago by
>saitoさん http://www.cl.cam.ac.uk/~sjm217/misc/openid-protocol.pdf
- 1) p,gをどこでどう計算しているか
- 2) X,x,Y,y をどこでどう計算しているか
- 3) hをどこでどう計算しているか
- 4) tvをどこでどう計算しているか
- 5) HMACk(I,C,n,t) をどこでどう計算しているか
が知りたいです
comment:11 Changed 14 years ago by
kunitadaさん
pは素数で比較的大きな値を取ります。OpenID1.1ではデフォルト値が 以下のように定められています。OpenPNEも同様です。
Appendix A. デフォルト値 Appendix A.1. Diffie-Hellman P Value http://wiki.openid.net/OpenID_Authentication_1.1_%28ja%29#Appendix_A._.E3.83.87.E3.83.95.E3.82.A9.E3.83.AB.E3.83.88.E5.80.A4
1551728981814736974712322577637155\ 3991572480196691540447970779531405\ 7629378541917580651227423698188993\ 7278161526466314385615958256881888\ 8995127215884267541995034125870655\ 6549803580104870537681476726513255\ 7470407658574792912915723345106432\ 4509471500722962109419434978392598\ 4760375594985848253359305585439638443
gは2以上の自然数です。OpenPNEでは2と指定しています。
comment:12 Changed 14 years ago by
X,Yはコンシューマとプロバイダの公開鍵です。 x,yはコンシューマとプロバイダの秘密鍵です。
g = h^{(p-1)/q} mod p X = g ^ xa mod p Y = g ^ xb mod p ^ P ∧ Q」は「命題 P と命題 Q がともに真」という命題を表す mod 「x mod y」は x を y で割った余りを表す。 ZZ = (y ^ X) mod p = (x ^ Y) mod p
comment:13 Changed 14 years ago by
hはbase64bitを使ってプロバイダが生成したセッション情報を操作しています。Association.phpには、シリアライズ用の関数とデシリアライズ用の関数が用意されています。
tvはスクリプト上は$lifutimeとして扱われています。プロバイダからバリデートされてからの有効期限を示します。現状、OpenPNEでは有効期限は設定していません。
HMACk(I,C,n,t)は、SHA1の暗号化を使ってアイデンティティ、コンシューマ、プロバイダ、現在時刻のデータの通信を行っています。HMACkを使うことによって通信の信頼性を確保しています。
comment:15 Changed 14 years ago by
OpenIDの携帯対応、プロバイダ側からコンシューマにリダイレクトされるときに500文字くらいのGETパラメータが返ってくるから、SO902iなどの携帯のURL文字数制限を超えちゃいますね。プロバイダ側のスクリプトをいじってPOSTで認証データを受け渡すか、XML-RPCなどで認証情報を交換するかなどの調査・検討が必要かと思います。
comment:16 Changed 14 years ago by
r5202 OpenPNEがOpenIDプロバイダで複数のコンシューマの認証要求に対応する (署名問題対応版)をコミットしました。POSTの問題は残っています
comment:17 Changed 14 years ago by
Milestone: | → OpenPNE2.11.5 |
---|---|
Owner: | changed from yamaji to saito |
このチケットの作業内容が既に r5281 時点で trunk に入っているので、とりあえず次期開発版OpenPNE2.11.5の対応項目としたいと思います。
comment:18 Changed 14 years ago by
Type: | project → enhancement |
---|
comment:20 Changed 14 years ago by
Keywords: | 確認中 removed |
---|---|
Milestone: | OpenPNE2.11.5 → OpenPNE2.11.6 |
ソースコードレベルのチェックをおこないましたが、
- 未定義の関数をコールしている箇所がある(webapp/modules/openid/page/auth.php 35行目、getSreg())
- キー名のみ検証済みのレスポンスを、以下のようにHTTPヘッダとして送信している(値のチェックや改行を取り除くなどのサニタイズ処理をしていない)
46 $webresponse =& $server->encodeResponse($response); 47 48 foreach ($webresponse->headers as $k => $v) { 49 header("$k: $v"); 50 }
- init.inc でなぜか携帯版使用設定をみている
11 //<PCKTAI 12 if (!OPENPNE_ENABLE_KTAI) { 13 // disable pc module 14 exit; 15 } 16 //>
- IS_OPENID_PROVIDER が事実上無効化されている(init.inc)
18 //<OpenID 19 if (!(defined('IS_OPENID_PROVIDER') && IS_OPENID_PROVIDER)) { 20 // disable pc module 21 // exit; 22 } 23 //>
など、問題点が散見されたことや、意図している挙動が見えにくいことなどを考え、今回のリリースからは外します。
comment:22 Changed 14 years ago by
Priority: | critical → major |
---|
comment:24 Changed 14 years ago by
Owner: | changed from saito to nobody |
---|---|
Priority: | major → critical |
comment:25 Changed 14 years ago by
Owner: | changed from nobody to kiwa |
---|---|
Status: | new → assigned |
画面仕様つくります
comment:26 Changed 14 years ago by
Owner: | changed from kiwa to nobody |
---|---|
Status: | assigned → new |
r6547 にて画面仕様が必要な部分の画面仕様を作成しました
comment:27 Changed 14 years ago by
Description: | modified (diff) |
---|
comment:28 Changed 14 years ago by
Owner: | changed from nobody to ogawa |
---|---|
Status: | new → assigned |
trunk に取り込みます。
comment:30 Changed 14 years ago by
Milestone: | OpenPNE2.11.7 → OpenPNE2.12beta1 |
---|
comment:32 Changed 14 years ago by
■課題
- メンバーがOpenIDのIDを確認する方法(#2251)
- 一度許可したConsumerを次回以降確認なしで許可できる機能
- 許可したConsumerのリスト確認、削除機能
- WordPress以外のConsumerでの試験
- sreg への対応
- 他、なにかいろいろ実装してなかった気がする
comment:34 Changed 14 years ago by
Keywords: | 確認中 added |
---|
comment:35 Changed 14 years ago by
Keywords: | テスト待ち added; 確認中 removed |
---|
comment:36 Changed 14 years ago by
Keywords: | テスト待ち removed |
---|---|
Resolution: | → fixed |
Status: | assigned → closed |
comment:37 Changed 14 years ago by
Keywords: | 親チケット added |
---|
あと、もう一歩のところかも知れない。実験は失敗続き。