質問: WEBページにOAuth 2.0(OpenID Connect含まず)を利用したログイン機能を作成した場合に、 ・ユーザー情報が変化しても一意に特定できるのか?どのように行うのか? ・仮に特定できないとした場合、変更前と同一ユーザーであることを確認する対処法があるのか? の2点を知りたいです。 OpenID Connect非利用時のOAuth2.0の認可を利用した認証について勉強しています。 読んでいる本には、OAuth2.0を利用してメールアドレスやユーザーIDにアクセス認可を得られる人なら本人だろうから、認証・ログイン機能を作れる旨が書いてありました。 しかし、メールアドレスやユーザーIDを変更可能な認可プロバイダもあり、本の内容そのままでは、ユーザー情報を変更されてしまうと別ユーザーとして扱われてしまうような気がしてなりません。 変更された場合でも、変更前と同一ユーザーだと特定できるものなのですか?現実にはどのようにして行われているのでしょうか? また、仮に特定できないのであれば、実際に運用されているサービスでは、一体どのようにして変更前後のユーザーが同一であることを確認しているでしょうか? 未だ知識や能力がWEBサービスを作る段階に達していないものの、どうしても気になってしまいます。 教えていただけないでしょうか、よろしくお願いします。
回答: (回答順は前後しますが、) > > ・仮に特定できないとした場合、変更前と同一ユーザーであることを確認する対処法があるのか? > > > いわゆるソーシャルログイン機能を有していると自称している認可サーバ(兼リソースサーバ)であれば、何らかの不変なユーザ識別子の提供は行っているはずです。 > > ・ユーザー情報が変化しても一意に特定できるのか?どのように行うのか? > > > これはspecで定義されているわけではないのでその認可サーバ(兼リソースサーバ)の実装に依ります。 例えばTwitterサービスでは(※OAuth1.0aだそうですが) メールアドレスともスクリーンネーム(注)とも異なる `user_id`という不変値でユーザを識別することになっているようです。 (注: Twitterサービスではメールアドレスもスクリーンネームも変更可能なのでこれらをユーザ識別子として採用していない) ざっくり言うと、このようなユーザ識別子(`sub`)の提供義務をspecで謳っているのがOpenID Connectです。 逆に言えば、上記のような不変なユーザ識別子を提供していない認可サーバ(兼リソースサーバ)を用いてのソーシャルログイン機能実現は、質問文中で疑問視されている通り、不可能です。