認証と認可・OAuthの仕組みを図解で説明 〜「〇〇でログイン」の裏側〜

「認証」と「認可」の違いを説明できますか?

どちらもログインの話でよく出てくる言葉なので、同じ意味だと思っている人も多いと思います。

また、Webサービスで見かける「Googleでログイン」のようなボタンの裏側では、OAuthという仕組みが使われています。

認証と認可の違いと、OAuthの仕組みについて、図を使って説明していきます。

認証と認可の違いの図。認証はホテルのフロントで本人かどうかを確かめること、認可は自分の部屋だけ開けられるカードキーを渡すこと

認証と認可の違い

認証 は、相手が本人かどうかを確かめること です。

IDとパスワードでログインするのは、認証です。

認可 は、相手に何をしてよいかの権限を与えること です。

ホテルでたとえると、次のようになります。

  • フロントで名前と予約を確かめる: 認証
  • 自分の部屋だけ開けられるカードキーを渡す: 認可

カードキーを持っている人は、決められた部屋に、決められた期間だけ入れます。

認証で「誰か」を確かめ、認可で「何をしてよいか」を決める、と覚えておきましょう。

パスワードを渡すと何が困るのか

例えば、写真を印刷するWebサービスに、クラウドに保存している写真を読み込ませたいとします。

一番簡単なのは、印刷サービスにクラウドのIDとパスワードを教えることです。

しかし、この方法には問題があります。

  • 印刷サービスが、写真を読む以外のこと(削除や設定の変更)もできてしまう
  • 印刷サービスからパスワードが漏れると、アカウントを乗っ取られる
  • 印刷サービスだけ使えなくするには、パスワードを変えるしかない
パスワードを渡す方法とトークンを渡す方法の比較図。パスワードを渡すと何でもできてしまうが、トークンなら写真を読むことだけで期限つき

そこで、パスワードの代わりに「写真を読むことだけができる、期限つきの許可証」を渡します。

この許可証を アクセストークン といいます。

アクセストークンを安全に受け渡すための決まりが、OAuthです。

OAuthとは?

OAuthは、利用者のパスワードを渡さずに、別のサービスに決められた範囲の権限を与えるための仕組み です。

現在使われているのはOAuth 2.0で、RFC 6749という文書で決められています。

OAuthには、次の4つの登場人物がいます。

OAuthの4つの登場人物の図。リソースオーナー、クライアント、認可サーバ、リソースサーバの役割と写真の例

OAuthの流れ

よく使われる「認可コード」という方式の流れを、簡単にして説明します。

OAuthの認可コード方式の流れの図。印刷サービスが利用者を認可サーバへ誘導し、利用者が許可すると、認可コードが利用者のブラウザを通して印刷サービスへ渡り、印刷サービスがアクセストークンと交換して写真を読む

① 利用者が、印刷サービスで「クラウドから写真を読み込む」を押す

② 印刷サービスが、利用者をクラウドの認可サーバの画面へ移動させる

③ 利用者が、クラウドにログインして「写真の読み取りを許可する」を選ぶ

④ 認可サーバが、利用者を印刷サービスの画面へ戻す。このとき、利用者のブラウザを通して認可コードを渡す

⑤ 印刷サービスが、認可コードをアクセストークンと交換する

⑥ 印刷サービスが、アクセストークンを付けて写真を読みに行く

利用者のパスワードを入力するのは、クラウドの画面だけです。

印刷サービスは、利用者のパスワードを一度も受け取りません。

アクセストークンには、使える範囲(スコープ)と有効期限が決められています。

OAuthは認証ではなく認可の仕組み

OAuthは、もともと 認可 のための仕組みです。

アクセストークンは「何をしてよいか」の許可証で、「誰がログインしたか」を伝えるためのものではありません。

そこで、OAuth 2.0に「誰がログインしたか」を伝える仕組みを加えたのが、OpenID Connectです。

OpenID Connectでは、アクセストークンに加えて、ログインした利用者の情報を含む IDトークン を受け取ります。

「〇〇でログイン」のボタンの多くは、このOpenID Connectを使っています。

OAuth 2.0とOpenID Connectの比較表。目的、受け取るもの、使われる場面を比べている

まとめ

今回は認証と認可、OAuthの仕組みについて説明しました。

認証は本人かどうかを確かめること、認可は何をしてよいかの権限を与えることです。

OAuthは、パスワードを渡さずに、範囲と期限を決めたアクセストークンで権限を与える仕組みです。

「〇〇でログイン」の裏側では、OAuthにログインの情報を加えたOpenID Connectが使われていることを覚えておきましょう。

OAuthのやり取りは、HTTPSで暗号化した通信で行うことが前提です。HTTPSの仕組みについては、SSL/TLS通信の仕組みを図解で説明の記事で説明しています。

サービスがパスワードを安全に保存する仕組みについては、パスワードのハッシュ化の仕組みを図解で説明の記事で説明しています。