JSPで行こう!

OpenID Connect

再び OpenID の話に戻ります。

OpenID でどう個人が特定できるのか?

OAuth2.0 で実装されている、OpenID Connect を調べていくと、
IDトークン(id_token)の中身と使い道に疑問が沸きます。

形式は、JWT(Json Web Token)であるというのは判るのですが、
じゃあこれで個人を特定できるものなのでしょうか?
JWT は、

で構成されています。
このうち、ペイロードの中身が問題です。
もし、個人を特定できる情報がここにあれば、それ以降の問い合わせは不要になるからです。

実際に返される値を見てみれば、判ると思います。
ペイロードの中身は、「クレーム」というキー・バリューの集合です。
Google、Yahoo!とも共通に含まれているのは、次の項目でした。

「[前編] IDトークンが分かれば OpenID Connect が分かる」の解説を読ませていただきました。
それによると、最初の5つが OpenID では必須項目です。
"at_hash" は、同時にアクセストークンも要求した際に追加される項目だそうです。
(確かにアクセストークンを返してました)
このほかにも、いろいろなクレーム情報が定義されており、認証サイト側で追加されることがあるようです。
実際、Google では、"email"を要求したので、"email" 情報も返却されていました。
Yahoo!では、その要求指定はありません。

ID トークンでユーザーを特定する

前段が長くなりましたが、結果として sub クレームが「ユーザーの一意識別子」ですので、
発行者(例えば Google)内では、同じ人は同じ値が返されることになり、特定できることになります。

逆に言えば、発行元(iss)が違えば、違う値になりますから、同一人物が、Google と Yahoo!で認証しても
同じ人とは判断できません。

アプリケーション(Webサイト)のユーザー管理で、同じ eMail アドレスの登録を許さないのであれば、
どのように対応するのか、考えておく必要があるでしょう。
eMail アドレスが同じだから同一人物とするのも乱暴ですし、「登録させない」とすると、もし同じ人が、
Google では認証したくなくて、Yahoo!に変えたかったような場合の対応も考えておく必要があります。
(ユーザー登録抹消手続きを対象eMail宛に送る等・・・)

度々酷評している Twitter ですが、私の GMail で登録しているアカウントを
ロックしたまま、抹消手続きすら出来ないのには呆れてしまいます。
SMS認証が嫌だっただけなのですが・・・抹消すら出来ないなんて。

そう言えば、Adobe の Acrobat Reader では、AdobeID なる登録を要求されますが、
外部認証として、Facebook と Google が使えます。
Google で認証した場合、既に登録されたemail だと、
「Google アカウントをこの Adobe ID に関連付ける (電子メールによる確認が必要です)」
という画面が表示されます。
該当メールに認証用コードが通知されるだけで、入力すると紐付けが完了します。
当然ですが、Google でもログインすることが出来ます。

なぜ、こんな例を挙げたかと言えば、実は私の会社ではAdobe製品は一括管理しており、
私自身で AdobeID を登録した覚えがありません。
悪用する訳ではありませんが、会社の意図と合っているかどうかは判りません。

ユーザー登録方法

他のサイトでも認証を使えるようにする場合、ユーザー情報には、何を持っておけば良いでしょうか?
面倒なのでIDトークンをそのまま持ってもいいと思いますが、トークンには期限がありますから、
全体を比較しても意味がありません。
意味があるとすれば、発行元(iss)とユーザー識別子(sub)位でしょうか。
複数の外部認証元を使えるようにするには、

後者が良いのでしょうが、新規登録の際も外部認証から行いたい場合(それが普通の感覚です)
作るまでは良いのですが、再ログインで、自分が前に何でログインしたか忘れるほうが多いと思います。
そうなると前者になります。複数のメールアドレスを使い分けている場合も問題ですね。
« 前頁 次頁 »