RPはエンドユーザーのどのIdentityに対して一意なユーザーと認識するべきか

IwamotoTakashiさんの日記(ここここここここ)やZIGOROuさんの日記で触れられていたので、ちょいとばかし、整理。

お題は、「RPはエンドユーザーのどのIdentityに対して一意なユーザーと認識するべきか」

OpenID 1.1

[Request]
openid.identity := Claimed Identifier
 Claimed Identifier は、ユーザが持っていると主張する
 識別子で、長期間変わらないことが期待されるもの。

[Response]
openid.identity := Verified Identifier

 したがって、delegate している場合は、delegate先で
 確認したIDになる。
 Delegate 先は、しょっちゅう変わることがありえる。

したがって、RPでキーとして使えるのは、Request の Openid.identity==Claimed Identifier。

OpenID 2.0

[Request]
openid.claimed_id := Claimed Identifier or identifier_select

 Claimed Identifier は、ユーザが持っていると主張する
 識別子で、長期間変わらないことが期待されるもの。
 XRIの場合は、Canonical IDで、これに複数のinameが
 結びつくこともある。その場合も、同一の人物と
 みなされる。
 ただし、OP Identifier が使われるときは、ユーザは
 リクエスト時には Claimed Identifier は提示しないので、
 openid.claimed_idとopenid.identityの値は常に
 http://specs.openid.net/auth/2.0/identifier_select

 となる。
openid.identity := OP-Local Identifier
 特に違うものが指定されない場合は、Claimed Identifier
 が openid.identity として使われなければならない(MUST)。
 http://specs.openid.net/auth/2.0/identifier_select が
 指定された場合は、OPはそのユーザに属するIDを
 選択して提示しなければならない。(Y!なんかは、このケース)
 一般的には、Delegate先で確認するIDが入る。
 SpecのAppendix A3の例参照。

[Response]
openid.claimed_id := Claimed Identifier.
 XRIの場合はCanonical ID。
 OP Identifier を使った場合は、OPで選択した
 OP Local Identifier。
openid.op_endpoint := OP Endpoint URL
 OP Local Identifier を確認するURL
openid.identity := OP Local Identifier

 OP Endpoint URL で実際に確認したIdentifier
 (OpenID 1.1 時代の verified identifier)

ちなみに、claimed_id と identity は両方ともあるか、両方とも無いかのどちらか。

で、懸案の、何をRP側のアカウントの主キーとするかであるが、2.0の場合はSpecに明確に書いてある。

11.5. Identifying the end user

The Claimed Identifier in a successful authentication response SHOULD be used by the Relying Party as a key for local storage of information about the user. The Claimed Identifier MAY be used as a user-visible Identifier. When displaying URL Identifiers, the fragment MAY be omitted.

というわけで、一言で言うならば、主キーにするのは、常に Claimed ID。

つまり、主キーとして使うのは、

OpenID 2.0 :レスポンスのopenid.claimed_id
OpenID 1.1 :リクエストのopenid.identifier

ということになります。

「変わらないものがキー」と覚えればわかりやすいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください