- ベストアンサー
OpenIDのユーザー識別について
- OpenIDによるユーザー識別について疑問があります。
- OpenIDを使用してログインする場合、Aサイトでの会員登録項目が減るだけではなく、パスワードの再設定が必要になる可能性もあるのでしょうか?
- OpenIDはユーザーの個別識別にどのような要素を利用しているのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
私のOpenIDの知識は1.1ベースなので,2.0においては古くなっている可能性があります。 根本が大きく変わるとは思えないのですが,大きく変わっていて現状とあわない場合はご指摘ください。 根本的なところの間違いっぽいのですが,ユーザーの識別をパスワードで行うことはありません。 ユーザーの識別を行うのに必要な物はIdentifier (ID:識別子) と呼びます。 パスワードはそのIDが本当にIDの持ち主によって使われていることを確認するための認証 (Authentication) に使われる値です。 通常のウェブサイトでは,最初にユーザーの認証を行い,認証に成功すると内部で乱数値を生成し,Cookieとしてその乱数値を送出します。 乱数値にはシステム内部でIDを紐付けておきます。 ウェブサイトへのアクセス時にCookieが渡された場合,乱数値がそのCookieに含まれることになります。 その乱数値が有効であるか,また有効なIDに紐付いているかをウェブサイトのシステムはチェックし,どちらも有効であれば「ログインしている状態」と判別します。 # 現在ログインしているかをDBに保持しておいて,そこもチェックする,等の追加要素はあることがあります。 Cookieの送出等は,通常各言語やミドルウェアのSession機構などを使います。 PHPだとCookieの送出がsession_startに相当します。なお,乱数値はPHP側が用意します。 なので,$_SESSION["user_id"] = $_POST["user_id"];などとしておいて, isset($_SESSION) && isset($_SESSION["user_id"]) && is_valid_user_id($_SESSION["user_id"]) あたりをチェックすることになります。 # is_valid_user_idはユーザーIDのチェック関数。 さて,本題です。 (1)について Aサイトでパスワードは不要です。 OpenIDとは認証を他のサイトに委譲するためのしくみなので,パスワードを用意するというのはOpenIDを否定することになります。 ちなみに,OpenIDの仕様書のタイトルは"OpenID Authentication"と言います。 references) SITE: Specifications | OpenID http://openid.net/developers/specs/ SITE: Final: OpenID Authentication 2.0 - Final http://openid.net/specs/openid-authentication-2_0.html (2)について まず,仕様書から拾ってみます。 > Identifier: > An Identifier is either a "http" or "https" URI, (commonly referred to as a "URL" within this document), or an XRI [XRI_Syntax_2.0]. This document defines various kinds of Identifiers, designed for use in different contexts. # 上記,OpenID認証2.0仕様書 2. Terminologyから引用。 ・スキーマがhttpまたはhttpsであるURL ・XRI のどちらかがユーザー判別用のIdentifier (ID) であることになります。 なので, https://me.yahoo.co.jp/a/adcdefgbuY3uOFUhijkltd124345- などはIDになります。 サイトAではOpenIDのID (正確にはUser-Supplied Identifierかな) をユーザー識別用に使うでしょう。 # 内部ではGUIDや連番を使っているかもしれませんが。 一度認証してしまえば,後は自分が認証サーバーである場合となんら変わりない処理になります。 パスワードまわりの疑問に関しては,パスワードが必要なのはOpenID Provider (OP) であって,Relying Party (RP) ではない為,割愛します。 # つまり,サイトA側ではパスワードやそれを代替する物を必要しない,ということ。