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
ということになります。
「変わらないものがキー」と覚えればわかりやすいと思います。
@_Nat Zoneをもっと見る
購読すると最新の投稿がメールで送信されます。