OAuth
OAuth
OAuthは、ユーザーがパスワードを共有せずに、サードパーティアプリケーションが保護されたリソースにアクセスできる認可フレームワークです。
OAuthとは?
OAuthは、ユーザーが自分のパスワードをサードパーティアプリケーションに知られることなく、保護されたリソースへのアクセスを安全に委譲するオープン標準です。 例えば、Googleアカウントで他のアプリにログインするときに使われています。
ひとことで言うと: 自分のGoogleパスワードを教えずに、「Googleフォトへのアクセスを許可する」という一時的な許可証をアプリに渡す仕組みです。
ポイントまとめ:
- 何をするものか: ユーザーの認証情報を保護しながら、アプリケーションがリソースにアクセスできるフレームワーク
- なぜ必要か: パスワード盗難のリスク軽減、きめ細かいアクセス制御、ユーザーの安心感向上
- 誰が使うか: 大規模プラットフォーム、APIを公開する企業、セキュリティを重視する開発者
なぜ重要か
かつてのウェブでは、Aのサービスを使うために、Bのプラットフォーム(例:Facebook)のパスワードをAに直接教える必要がありました。これは信じがたいほど危険です。パスワードを知られると、アプリケーションはユーザーのすべてのアクション(写真削除、設定変更など)ができてしまうからです。
OAuthは異なるアプローチを取ります。ユーザーは認可サーバー(Facebook、Googleなど)に直接ログインし、「このアプリにこの権限を与える」と明示的に許可します。その後、一時的なトークンのみがアプリに渡されます。トークンは権限が限定されており、期限が切れたら無効になります。これにより、セキュリティと利便性の両立が実現されました。
仕組みをわかりやすく解説
OAuthフローには複数のステップがあります。まずユーザーが写真印刷サービスで「Googleで連携する」をクリックすると、ブラウザがGoogleの認可サーバーに飛びます。そこでユーザーはGoogleアカウントでログインし、「この印刷サービスにフォトアクセスを許可する」と同意します。
Googleは認可コード(一時的な通行証)を発行し、印刷サービスに返します。印刷サービスはこのコードを使ってGoogleのAPIを呼び出し、アクセストークン(本物の許可証)を獲得します。以降、このトークンを使って、ユーザーのGoogleフォトにアクセス可能になります。
ユーザーが後でアクセスを取り消したい場合、Google の管理画面からアプリを削除するだけで、即座にトークンは無効になります。
実際の活用シーン
ソーシャルログイン - FacebookやGoogleアカウントで他のサイトにログインできる。
APIアクセス権限管理 - SlackボットがSlackワークスペースのメッセージを読むために必要な権限のみを取得する。
モバイルアプリ認証 - iPhoneアプリがユーザーの連絡先データにアクセスする際、OSが管理するOAuthで安全にアクセス権を制御する。
マイクロサービス間通信 - 複数のサービス間で相互認証を行う際、OAuthトークンで権限を管理する。
メリットと注意点
メリット - パスワード盗難のリスクが低下し、ユーザーはアプリごとに細かい権限制御ができます。アプリ開発者は認証実装の負担が軽減され、ユーザーは複数アプリ間でのシームレスなログインが可能です。
注意点 - OAuth実装が複雑で、開発者が誤った実装をするリスクがあります。また、不正なアプリが信頼できるアプリになりすまし、ユーザーを騙して権限を譲渡させることもあります。トークン管理も適切に行わないと、セキュリティ脆弱性が生じます。
関連用語
- API — OAuthはAPIのセキュアなアクセス制御を実現します。
- 認証 — ユーザーの身元確認はOAuthの前提です。
- トークン — OAuthが発行する一時的なアクセス許可証です。
- JWT — トークンの標準フォーマットの一つです。
- OIDC — OAuthを拡張した認証フレームワークです。
よくある質問
Q: OAuthと従来のパスワード認証の違いは? A: 従来はパスワードを直接共有し、アプリが全権限を得ます。OAuthは限定的なトークンを時間制限付きで渡します。
Q: OAuthトークンが盗まれた場合、どうなりますか? A: 盗まれたトークンは権限が限定されており、期限も限定されているため、被害を最小化できます。ユーザーが長時間気づかなくても、トークンはいずれ無効になります。
Q: すべてのアプリでOAuthが使えますか? A: OAuthに対応するサービスは多いですが、全部ではありません。セキュリティを重視するサービスほど実装している傾向にあります。