OpenIDのお勉強
流れ流れて、好きなものを勉強してみる。ってことで、気になってたけど全然調べてなかったOpenID。
大体の感じは OpenID をブロガー向けに分かりやすく説明すると?:Goodpic で良いかも。もう少し踏み込んだ記事で OpenIDの仕様と技術 というのが上がってたので、読んでみた。
OpenIDってなによ
OpenID(オープンアイディー)とはサイトを越えて使用できる認証システムと、そのシステムで利用できるID(identification)を指す。個人が登録した情報を公開することで個人の同一性を保証する。
複数のOpenID対応サイトを1つのOpenIDで利用できる。
OpenIDは発行したサイトにより異なる文字の並びになるが、どこで発行されたOpenIDでも同じように利用できる。
(中略)
OpenIDを管理するサイトに、個人情報を記述したページを作れば(証明したい相手が、OpenIDを採用しているなら)、そのページのURLを広くインターネットで、個人の同一性の証明として使うことができる。
OpenIDに対応している相手(サービス等)に対して、「ちょっと見てくれ、このブログ、ほらログインできるだろ?俺がAyasだよ!な!」とやれるようになる*1。
実際の流れ
OpenIDに対応したオークションサイトへログインする場合の話。認証用URLとしては、はてなのログイン画面みたいなのだとして。
- エンドユーザはログインする為に、「ちょっと見てくれ(ry」と認証用URLをオークションサイトに入力する。
- オークションサイトは「じゃあログインしてみろ」と認証用URLへリダイレクトさせる。
- この時、オークションサイトは戻り場所(URL)を指定する。
- 認証用URLでエンドユーザの認証を行う。今回の場合、ログインしてみせる。
- つまりIdentity Provider(以下、認証局)が認証を行う。
- 認証結果を(クエリに)持って、オークションサイトの戻り場所(URL)へリダイレクト。
- オークションサイトが認証結果を入手*2。
なお、通信は共有鍵暗号(強く推奨)か、認証後に再度結果を照合することで、内容を保証する。
通信相手の確認は?
あなたがConsumerだとして、まさにassociateしようとしている相手が本当に正しい相手かどうか確認できているでしょうか。あるいは Claimed Identifierの確認のために実際にユーザーのURLへアクセスしますが、そのホスト名は正確なIPへ正引きできているでしょうか。
そのような危険性に対して神経質なアクセスを行うのがLWPx::ParanoidAgentです。OpenIDの仕様上でも使うことを推奨しています。またホワイトリスト形式やブラックリスト形式にも対応しているので、詳しくはCPANのオンラインドキュメントを見てください。
http://www.atmarkit.co.jp/fsecurity/rensai/openid04/openid01.html
詳しくは解らないが、Perlの場合、LWPx::ParanoidAgentの信頼性が確保され、きちんと用いられれば対応できるらしい。
Identity Providerの信頼性の問題
OpenIDの認証局は
いままでの認証サービスのように特定のベンダが提供する唯一の場所というわけではなく、誰でも認証局になることができます。
なので、認証と認可の違いが特に意識される。
* 認証(Authentication)
そのユーザーが自分の物であると主張するIDに対して、そのIDが確かにそのユーザーの物であるということを保証すること
* 認可(Authorize)
認証されたIDを受け入れ、サービスに対して適切な権限を与えること
認可は、その「OpenIDで認証されたIDを、正当なIDとしてサービスの利用を許可するかどうか」といったところ。誰でも認証局になれるなら、認証されたからといって全面的に信頼するわけにもいかない。信頼を置く認証局を厳しく定め、「お前の認証局で認証できたことは解った。でもうちは受け入れられない」というのをやらないと、俺俺認証で通れてしまう。
【注3】
OpenIDの仕様上、誰でもConsumerやIdPになれるという点から、特にConsumerはどのIdPを信用したらよいかという問題が残ります。
これに関しては現行仕様の中では触れていませんし、現時点で有効な解決策も見つかっていません。詳しく知りたい方はopenid-jaグループの以下のスレッドを参照してください。
How to authorize the identity providers in OpenID
http://groups.google.co.jp/group/openid-ja/browse_thread/thread/24237e403a7ef82a?hl=ja
以上終わり。間違ってたら指摘を。
No Comments