アプリ版:「スタンプのみでお礼する」機能のリリースについて

OpenIDは「ひとつのIDですべてのサイトにログインできる」と言われていますがいくつか疑問があります。

例えばYahooのIDでログインをする場合、OpenIDに対応しているサイト(=Aサイトとします)はOpenIDを通じてYahooの方から「ニックネーム」「性別」「年齢」「メールアドレス」を取得したとします。

多くのOpenIDではパスワードなどのやりとりはないと思うのですが、

(1)結局Aサイトでユーザーはパスワードを新たに決める必要があるのではないでしょうか?
  そうなるとおのおののサイトでやはりパスワードが必要になるため「ひとつのIDでログインできる というより会員登録する項目が減った」だけというイメージなのですが・・・

(2)OpenIDはつまるところ何によってユーザー判定をしているのでしょうか?
 ソースを見たところAサイトでOpenIDでログインすると上記のニックネームなどをSESSIONなどで以て返ってきていると思うのですがどの部分をパスワード替りに代用しているのでしょうか?


Yahooの場合、各ユーザーごとに「あなたのOpenIDは https://me.yahoo.co.jp/a/adcdefgbuY3uOFUhijkltd1 … といった識別乱数のようなものもありますがこれをパスワード替わりにAサイトでは認識しているのでしょうか?

以上、よろしくお願いいたします。

A 回答 (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_ …


(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/adcdefgbuY3uOFUhijkltd1 …
などはIDになります。
サイトAではOpenIDのID (正確にはUser-Supplied Identifierかな) をユーザー識別用に使うでしょう。
# 内部ではGUIDや連番を使っているかもしれませんが。
一度認証してしまえば,後は自分が認証サーバーである場合となんら変わりない処理になります。

パスワードまわりの疑問に関しては,パスワードが必要なのはOpenID Provider (OP) であって,Relying Party (RP) ではない為,割愛します。
# つまり,サイトA側ではパスワードやそれを代替する物を必要しない,ということ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!