OAuth認証とは?本当は「認可」の仕組み!SSO・SAML・APIキーとの違いを画像多めで解説
この記事では、OAuthについて初心者向けに解説します。
特に、
・OAuthとSSOの違い
・OAuthとSAMLの違い
・OAuthとAPIキーの違い
・OAuthがなぜ「パスワードを渡さない仕組み」なのか
を、会話形式と画像でざっくり理解できるように説明します。
なお、よく「OAuth認証」と呼ばれることがありますが、
OAuthの中心は正確には「認証」ではなく「認可」です。
ただし、実際のログイン画面で見かけることも多いため、
初心者には少し混乱しやすい用語です。
OAuthとは?

OAuthって何?
SSOとかSAML認証と関係ある?
1回の認証でいろんなサービスにログインできるやつ!

関係あるよ!
たしかに、OAuthはSSOやSAMLと一緒に出てくることが多いから、混乱しやすいんだ。
まず、それぞれの用語を整理してみようか。

SSOの復習

SSOは「1回のログインで複数のサービスを利用できる仕組み」だね!

そうそう。
SSOは Single Sign-On の略で、
1回のログインで複数のサービスを利用できる仕組み だね。
たとえば、会社で朝に一度ログインすると、
- 勤怠システム
- メール
- 社内ポータル
- 経費精算システム
などに毎回IDとパスワードを入力しなくても入れるようになるね。
SAMLの復習

SAMLは、SSOを実現するためによく使われる仕組みだったね。

前に使ったたとえで言うと、
会社の受付と入館証 のイメージだね。
会社の受付で本人確認をして、
「この人は入って大丈夫です」という入館証をもらう。
その入館証を見せれば、
いろいろな部屋に入れるんだね。

つまりSAMLは、
「この人は本人確認済みです」とサービス側に伝える仕組みなんだね!

その通り。
SAMLは主に 認証、つまり
あなたは誰ですか?
を扱う仕組みだね。
じゃあOAuthは何が違うの?

OAuthもログインする仕組みなの?

ここが大事だよ。
OAuthは、SSOやSAMLと似た場面で出てくるけど、中心になる考え方が少し違ってね。
OAuthは主に 認可 の仕組みなんだ。

「認可」?SAMLは「認証」って言っていたよね?
何が違うの??

簡単に言うと、
- 認証:あなたは誰ですか?
- 認可:あなたに何を許可しますか?
という違いだね。
SSOやSAMLは、どちらかというと
「この人は誰か」 を確認する話。
一方でOAuthは、
「このアプリに、どこまで使わせていいか」 を決める話なんだ。

OAuthのイメージ

「どこまで使わせていいか」が認可ってこと?

たとえば、B君が写真印刷アプリを使うとするよ。
そのアプリが、B君のGoogleフォトにある写真を使いたいとする。
でも、写真印刷アプリにGoogleのIDとパスワードを教えるのは怖いよね。

あぁ、Google IDとパスワードがあればフォト以外もできちゃうね。
アプリが信頼できるかもわからないし、怖すぎるね。

こういう時にOAuthが使われるよ。
OAuthでは、パスワードを直接渡さずに、
「写真を見る権限だけ許可する」
というように、必要な範囲だけ許可できるんだ。
たとえ:家の鍵ではなく、限定された許可証


OAuthは、家の鍵を丸ごと渡すのではなく、
「玄関だけ入っていいよ」
「この棚だけ見ていいよ」
という限定された許可証を渡すイメージだね。

パスワードという本物の鍵を渡すのではなく、
必要な場所だけ使える許可証を渡すんですね。

そうそう。
しかも許可する範囲を決められる。
たとえば、
| 許可内容 | イメージ |
|---|---|
| 写真を見るだけ | 写真の閲覧だけOK |
| カレンダーを見るだけ | 予定の確認だけOK |
| SNSに投稿する | 投稿だけOK |
| メールを送る | メール送信だけOK |
OAuthは、
「このアプリに、どこまで使わせていいか」を決める仕組み
なんだ。
OAuthの流れ


実際の流れはこんな感じだよ。
① 利用者がアプリを使う
↓
② アプリが「Googleのデータを使わせて」と依頼する
↓
③ Googleの画面で利用者が許可する
↓
④ アプリにアクセストークンが渡される
↓
⑤ アプリはアクセストークンを使って、許可された範囲だけアクセスする

アクセストークンって何?

さっきのたとえでいう、限定された許可証 だね。
アプリは利用者のパスワードを持つのではなく、
アクセストークンという許可証を使って、
許可された範囲だけアクセスするんだ。
APIキーとの違い

OAuthがGoogleへの許可証になるんだよね?
アプリは、発行されたアクセストークンを使ってアクセスするんだよね?

そうだね。

APIキーもGoogleの機能を使うための認可みたいなものじゃないの?
たとえばGoogleのAPIを使うときにAPIキーを入れるなら、
それも「Googleの機能を使っていいですよ」という許可証と言えない?

たしかに、APIキーも「APIを使うための鍵」のように見える。
でも、OAuthとAPIキーは、
誰の何を許可しているのか が違うんだ。
APIキーも「使ってよい」という意味では許可に近い面がありけど。
ただし、OAuthのように「本人が、自分のデータへのアクセスを許可した」という意味ではないんだ。
APIキーについて


APIについて整理しておこうか。
APIを簡単に言うと、
他のアプリやシステムから、サービスの機能を使うための窓口 だよ。

たとえばGoogleには、いろいろなAPIがあるよね。
- Googleマップを表示するAPI
- Googleカレンダーの予定を取得するAPI
- Googleドライブのファイルを取得するAPI
- YouTubeの情報を取得するAPI
APIは、Googleの機能を外部のアプリから使うための入口なんだよね。

そうそう。
そして、そのAPIを使うときに、
「誰がこのAPIを使っているのか」を確認するために使われることがあるのが APIキー だよ。
APIキーは「アプリの名札」に近い

APIキーは、許可証ではないの?

完全に許可証っぽい面もあるけど、
初心者向けには アプリの名札 と考えると分かりやすい。
APIキーは、たとえばGoogleに対して、
このリクエストは、〇〇というアプリから来ています
と伝えるために使われる。
つまり、APIキーは主に、
アプリやプロジェクトを識別するためのもの なんだ。

名札?

うん。
お店でたとえると、APIキーは
「この業者は登録済みの業者です」
と分かる業者証みたいなもの。
ただし、それだけでは普通、
本人のGoogleフォトを見ていい
という許可にはならない。
OAuthは「ユーザー本人の許可証」

じゃあOAuthは?

OAuthは、
ユーザー本人が、このアプリにこの範囲まで使わせていいと許可する仕組み
だよ。
たとえば、写真印刷アプリがB君のGoogleフォトを見たい場合。
APIキーだけだと、
この写真印刷アプリは登録済みのアプリです
くらいは分かる。
でも、
B君の写真を見ていいです
とは言えない。
そこでOAuthを使って、B君本人が、
このアプリに、私の写真を見る権限を許可します
と許可するんだ。
APIキーとOAuthの違い


整理するとこんな感じだね。

APIキーは「このアプリはAPIを使っていいアプリです」という名札。
OAuthは「このユーザーが、このアプリにここまで許可しました」という許可証なんだね。
たとえ:APIキーとOAuthの違い

もう少し例えるとこんな感じ。

APIキー
APIキーは、施設に入る業者の
会社名入りの入館カード みたいなもの。
この業者は登録されています
ということは分かる。
でも、そのカードだけで
お客さん個人のロッカーを開けていい
とはならない。
OAuth
OAuthは、お客さん本人が出した
「この業者に、私のロッカーを開けることを許可します」
という許可証のようなもの。
しかも、
- ロッカーを見るだけ
- 荷物を取り出してもいい
- 今日だけ有効
- この棚だけOK
のように、範囲を決められる。
APIキーだけでいい場合

APIキーはどんなときに使うの?

たとえば、ユーザー個人の秘密情報を扱わない場合だね。
例としては、
- 地図を表示する
- 天気情報を取得する
- 公開されているデータを取得する
- アプリの利用量を管理する
こういう場合は、APIキーで十分なことがある。

個人の大事な情報にアクセスしないなら、APIキーでもいい場合があるんだね。

そう。
ただし、APIキーも外部に漏れると悪用される可能性があるから、管理は大切だよ。
OAuthが必要になる場合

OAuthが必要なのは、ユーザー本人のデータや権限を扱うときってことだね。

たとえば、
- Googleドライブの自分のファイルを見る
- Googleカレンダーの予定を取得する
- Googleフォトの写真を見る
- SNSに自分のアカウントで投稿する
- メールを送信する
こういう場合だね。これらは、
ユーザー本人が許可したこと が大事になるよ。

たしかに。
勝手に自分のファイルを見られたり、SNSに投稿されたりしたら困るね。

だからOAuthでは、
ユーザーが明示的に許可する画面 が出てくるんだ。
APIキーとOAuthを一緒に使うこともある

APIキーとOAuthは一緒に使うこともあるよね?
さっきの例で言うと、APIキーで業者が入って、OAuthの許可証を使ってロッカー開けるといった感じで

場合によっては、APIキーとOAuthを組み合わせて使うこともあるね。
ざっくり言うと、
APIキー:
このアプリは誰か?
OAuth:
このユーザーは何を許可したか?
という役割分担をするよ。
言ってくれたように、アプリの確認と、ユーザーの許可は別なんだ
SSO・SAML・OAuth・APIキーの違い


APIでちょっと脱線しちゃったね。ちょっと違いをまとめてみようか。

SSOは、
1回ログインすれば複数サービスを使える仕組み。
SAMLは、
本人確認済みであることを伝える仕組み。
OAuthは、
ユーザー本人がアプリに必要な権限だけ許可する仕組み。
APIキーは、
APIを使うアプリを識別するためのキー。
こういう違いだね。
まとめ

OAuthを一言でいうと、
パスワードを渡さずに、他のアプリへ必要な権限だけを許可する仕組み
だよ。

SSOやSAMLは「ログイン・本人確認」の話。
OAuthは「このアプリにどこまで使わせるか」の話。
そう考えると分かりやすいね。

そうそう。
OAuthは、
「ログインできる仕組み」ではなく、まずは「権限を安全に渡す仕組み」
として覚えると混乱しにくいよ。

APIキーとの違いは、
APIキー:
このアプリは誰か?を示す名札
OAuth:
このユーザーが、このアプリに何を許可したかを示す許可証
と考えるといいよ。

