はじめに
最近 OAuth 認証に関する実装を行うことがありました。「Google, Apple でログインする」 のようなアレです。
実装にあたっての理解を整理するため、備忘録とするためにも記事としてまとめておきます!
OAuth とは何か
ひとことで言うと、OAuth とは次のような仕組みです。
「ユーザーがパスワードなどを第三者アプリに直接渡さず、限定的な権限だけを与えるための仕組み」
分かるような、分からないようなって感じですよね。
もっっと噛み砕いて言うと
ユーザーはよく分からないアプリにパスワード登録しなくてラッキー って感じです
主な利点
- ユーザーは、第三者アプリにパスワードなど機密情報を渡す必要がないこと
- 開発者としては、他アプリとの連携を容易に行えること
などなど、多くの利点が存在します。
OAuth の流れ
登場人物
OAuth 認証には主に4 人の登場人物がいます。それが以下です。
- 🧑💼 リソースオーナー(ユーザー): アプリを利用している、Google アカウントなどの持ち主
- 📱 クライアント(アプリ): ユーザーの許可を得て、ユーザーのデータにアクセスしたいアプリ
- 🔐 認可サーバー: ユーザー認証と同意を確認し、アプリにユーザーのデータの使用許可を与えるサーバー
- 🗄️ リソースサーバー: ユーザーのデータを実際に保持しているサーバー
その他の用語には以下のようなものがあります!
💡 用語メモ
- アクセストークン: 実際に API を呼び出すときに提示する「通行証」のようなもの
- 認可コード: 一時的な合言葉。アクセストークンをもらうためだけに使う短命なコード
これらの登場人物がいるので、頭の片隅に留めておくと理解しやすいです!
簡単なステップ
ここからは OAuth のステップを紹介していきます。
1. 📱 アプリが「Googleでログインしてね」とお願い
まず、アプリ が ユーザー に「Googleでログインしてね」と認証を求めます。
2. 🧑💼 ユーザーが 🔐 認可サーバーでログイン&同意
ユーザー は 認可サーバー(Google など) でログインし、「このアプリに自分の情報を使わせてもいいよ」と同意します。
3. 🔐 認可サーバーが認可コードを 📱 アプリに渡す
同意を確認したら、認可サーバー は 認可コード を アプリ に返します。
認可コード: アクセストークンをもらうためだけに使う短命なコード
4. 📱 アプリが認可コードをアクセストークンに交換
アプリ は 認可サーバー に「認可コードをアクセストークンに交換して!」とリクエストします。
アクセストークン: 実際に API を呼び出すときに提示する「通行証」のようなもの
5. 📱 アプリが 🗄️ リソースサーバーからデータ取得
アクセストークン を使って、リソースサーバー(GoogleのAPIなど)からユーザーのデータを取得できるようになります。
このようにして、アプリはユーザーのパスワードを保持しないとしても、アクセストークンを利用することで、ユーザーに関するリソースにアクセスすることが可能になります!
その他
この画像なんかも比較的分かりやすいのでおすすめです!
おわりに
以上がざっくりとした OAuth 認証の流れです!
本当はリフレッシュトークンであったり State の話であったりなど奥が深いのですが、今回はざっくりと説明しています。
気が向いたらそちらの話に関しても記事を書いてみたいと思います。
この記事が何かの役に立てば幸いです、お読みいただきありがとうございました!

