認証と認可・OAuthの仕組みを図解で説明 〜「〇〇でログイン」の裏側〜
「認証」と「認可」の違いを説明できますか?
どちらもログインの話でよく出てくる言葉なので、同じ意味だと思っている人も多いと思います。
また、Webサービスで見かける「Googleでログイン」のようなボタンの裏側では、OAuthという仕組みが使われています。
認証と認可の違いと、OAuthの仕組みについて、図を使って説明していきます。

認証と認可の違い
認証 は、相手が本人かどうかを確かめること です。
IDとパスワードでログインするのは、認証です。
認可 は、相手に何をしてよいかの権限を与えること です。
ホテルでたとえると、次のようになります。
- フロントで名前と予約を確かめる: 認証
- 自分の部屋だけ開けられるカードキーを渡す: 認可
カードキーを持っている人は、決められた部屋に、決められた期間だけ入れます。
認証で「誰か」を確かめ、認可で「何をしてよいか」を決める、と覚えておきましょう。
パスワードを渡すと何が困るのか
例えば、写真を印刷するWebサービスに、クラウドに保存している写真を読み込ませたいとします。
一番簡単なのは、印刷サービスにクラウドのIDとパスワードを教えることです。
しかし、この方法には問題があります。
- 印刷サービスが、写真を読む以外のこと(削除や設定の変更)もできてしまう
- 印刷サービスからパスワードが漏れると、アカウントを乗っ取られる
- 印刷サービスだけ使えなくするには、パスワードを変えるしかない

そこで、パスワードの代わりに「写真を読むことだけができる、期限つきの許可証」を渡します。
この許可証を アクセストークン といいます。
アクセストークンを安全に受け渡すための決まりが、OAuthです。
OAuthとは?
OAuthは、利用者のパスワードを渡さずに、別のサービスに決められた範囲の権限を与えるための仕組み です。
現在使われているのはOAuth 2.0で、RFC 6749という文書で決められています。
OAuthには、次の4つの登場人物がいます。

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

① 利用者が、印刷サービスで「クラウドから写真を読み込む」を押す
② 印刷サービスが、利用者をクラウドの認可サーバの画面へ移動させる
③ 利用者が、クラウドにログインして「写真の読み取りを許可する」を選ぶ
④ 認可サーバが、利用者を印刷サービスの画面へ戻す。このとき、利用者のブラウザを通して認可コードを渡す
⑤ 印刷サービスが、認可コードをアクセストークンと交換する
⑥ 印刷サービスが、アクセストークンを付けて写真を読みに行く
利用者のパスワードを入力するのは、クラウドの画面だけです。
印刷サービスは、利用者のパスワードを一度も受け取りません。
アクセストークンには、使える範囲(スコープ)と有効期限が決められています。
OAuthは認証ではなく認可の仕組み
OAuthは、もともと 認可 のための仕組みです。
アクセストークンは「何をしてよいか」の許可証で、「誰がログインしたか」を伝えるためのものではありません。
そこで、OAuth 2.0に「誰がログインしたか」を伝える仕組みを加えたのが、OpenID Connectです。
OpenID Connectでは、アクセストークンに加えて、ログインした利用者の情報を含む IDトークン を受け取ります。
「〇〇でログイン」のボタンの多くは、このOpenID Connectを使っています。

まとめ
今回は認証と認可、OAuthの仕組みについて説明しました。
認証は本人かどうかを確かめること、認可は何をしてよいかの権限を与えることです。
OAuthは、パスワードを渡さずに、範囲と期限を決めたアクセストークンで権限を与える仕組みです。
「〇〇でログイン」の裏側では、OAuthにログインの情報を加えたOpenID Connectが使われていることを覚えておきましょう。
OAuthのやり取りは、HTTPSで暗号化した通信で行うことが前提です。HTTPSの仕組みについては、SSL/TLS通信の仕組みを図解で説明の記事で説明しています。
サービスがパスワードを安全に保存する仕組みについては、パスワードのハッシュ化の仕組みを図解で説明の記事で説明しています。


