OAuth2とOpenID Connect
OAuthで認証をしてはいけない理由と、OpenID Connectがなぜそれを解決できるかについて。
OAuth 2の仕組み
ユーザーAがリソースを使いたいクライアントA(例: SNSの自動投稿サービス)のサイトへ行く
「連携」などのボタンを押し、リソースを提供するサービスA(例: SNS)へ遷移する
リソースを提供するサービスで認可をすると、クライアントAに認証キーがコールバックされる
この認証キーでリソースにアクセスできる
OAuth 2の問題点
この認証キーは本来「ユーザーAのリソースをアクセスする権利」であり「ユーザーがそのサービスのアカウントを持っている証明」にはならない。
なぜなら、例えばクライアントAの開発者に悪意がある場合、ユーザーAのコールバックを保存しておきクライアントBにコールバックを渡すと、ユーザーAとしてクライアントBにログインできてしまう。
このため認証キーをもらう=ログインできた、にしてはいけない。
OAuthは認証プロトコルではなく認可プロトコルである
対応策
コールバックで帰ってきた信用できない認証キーを、別途クライアントAがサービスAに対して「本当にうちのサービスで使っていいか?」と検証しに行けばいい。
これらを実装した拡張版OAuth2としてOpenID Connectがある。
独自実装することもできる。