OAuthとは何か
OAuth(オーオース)とは、あるサービスに自分のパスワードを直接教えることなく、別のサービスが持つ自分の情報(の一部)へのアクセスを許可するための仕組みです。「Googleでログイン」「Xでログイン」といったボタンの裏側で、まさにこのOAuthという仕組みが動いています。
なぜパスワードを教えずに済むのか
従来の発想であれば、あるサービスに別サービスの情報を使わせたい場合、素直に考えるとID・パスワードをそのまま伝える必要がありそうです。しかしそれでは、パスワードを預けたサービス側でなりすまし放題になってしまい、大変危険です。
OAuthでは、パスワードの代わりに「特定の範囲だけ利用を許可する、期限付きの合鍵」のようなデータ(トークンと呼ばれます)を発行し、これを連携先のサービスに渡します。パスワードそのものは、発行元のサービス(Googleなど)の外に一切出ない仕組みになっています。
ホテルの「カードキー」に例えると
OAuthの仕組みは、ホテルのカードキーに例えるとイメージしやすくなります。
- 部屋のマスターキー(パスワードそのもの)を、清掃スタッフに渡すことはしない
- 代わりに「この部屋だけ」「チェックアウトまでの期限だけ」有効なカードキー(トークン)を発行する
- 期限が切れれば、そのカードキーはただの板になり、それ以上は使えなくなる
このように、必要な範囲・期間だけに絞った「合鍵」を発行する点が、OAuthの本質的な発想です。
「Googleでログイン」を押したときの大まかな流れ
- サービスのログイン画面で「Googleでログイン」を選択する
- Googleの画面に切り替わり、本人であることを確認する(パスワード入力はここだけで行われる)
- 「このサービスに、氏名やメールアドレスの共有を許可しますか?」といった確認画面が表示される
- 許可すると、Googleから連携先のサービスへトークンが渡され、ログインが完了する
途中でパスワードの入力を求められる画面が、常にGoogleなど発行元のドメインであることを確認する習慣も、なりすましサイトを見分けるうえで役立ちます。
利用者にとってのメリット
- パスワードを新しく覚える必要がなく、使い回しによる漏えいリスクも減らせる
- 発行元のアカウント側で二段階認証などを設定しておけば、連携先のサービスにもその安全性の恩恵が及ぶ
- 不要になった連携は、発行元のアカウント設定からいつでもまとめて取り消せる
「ログインできない=パスワードが違う」とは限らない
OAuth関連で分かりにくいのは、「ログインできない=パスワードが間違っている」とは限らないことです。例えば「Googleアカウントでログインする」という仕組みを使っている場合、実際にはサービス側がGoogleに「この人を認証していいですか」と確認して、その結果を受け取っています。そのため、サービス側・Google側・権限設定など、複数の場所を見る必要が出てきます。企業のシステム連携でも、「認証は成功しているのに、その後の処理だけ失敗する」という切り分けの難しいケースがあります。OAuthは「ログイン方法」とだけ考えると分かりにくいですが、「本人確認を別のサービスにお願いする仕組み」と考えると理解しやすいと思います。
まとめると
OAuthは、パスワードそのものを渡すことなく、必要な範囲だけを区切った「合鍵」で安全にサービス同士を連携させる仕組みです。「Googleでログイン」のようなボタンを見かけたら、裏側でこうした仕組みが働いていることを思い出してみてください。
参考
※ 内容は変化することがあるため、最新の情報は各サービスの公式ヘルプもあわせてご確認ください。
あわせて読みたい:SSO(シングルサインオン)とは