0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OAuthとは

OAuth(Open Authorization)
認可プロトコルで、オンライン認可の業界基準。
最新バージョンは2.0

ユーザーが自分のアカウントパスワードを共有せずに、
サードパーティのアプリケーションに自分のデータ(X、Googleなど)へアクセスできるよう設計された基準

具体的にはソーシャルログイン(ID,PWが不要でログインできる)などに使われている

引用元
https://auth0.com/jp/intro-to-iam/what-is-oauth-2

OAuthを利用するメリット

  • ユーザビリティの向上:
    ユーザーは新たにユーザー名やパスワードを覚える必要なく、既存のソーシャルメディアアカウントを使用してサービスにログインができ、ユーザー体験が向上する。
  • 登録の簡素化:
    新規ユーザーは、ソーシャルメディアアカウントを使用して簡単に登録できる。これにより、登録プロセスが簡素化され、ユーザーの離脱率低下に貢献。
  • セキュリティの強化:
    パスワードを直接管理する必要がなくなるため、パスワードリセットやパスワード盗難のリスクが減少します。また、ソーシャルメディアプロバイダーは通常、セキュリティ対策(例えば二段階認証)を提供しています。

認証と認可の違い

  • 認証(Authentication)
    ユーザーが誰かを証明すること
    例:ログイン

  • 認可(Authorization)
    ユーザーができる権限を管理すること
    例:非公開ファイルへのアクセス

OAuthの仕組み

構成

  • リソースオーナー(ユーザー)
    リソースの持ち主で、アクセスを許可する

  • クライアント(アプリ、バックエンドAPIなど)
    リソースオーナーに代わり、リソースへアクセスを要求する

  • 認可サーバー(X API、Google APIなど)
    リソースオーナーを認証し、クライアントにアクセストークンを発行する
    OAuth2.0において最も重要な役割を果たす
    このサーバーは、クライアントからのアクセストークンのリクエストを受信し、認証が成功してリソースオーナーから合意を得たら、アクセストークンを発行します。

認可サーバーは、2つのエンドポイントを公開します。
・認可エンドポイント:インタラクティブな認証とユーザーの合意を取り扱います。
・トークンエンドポイント:マシンtoマシンに関与します。

  • リソースサーバー(X、Googleなど)
    リソースを管理する

*認可サーバーとリソースサーバーは同一のシステムで統合されてるケースも多い

認可グラントタイプ

クライアントがアクセストークンを取得する方法
・認可コードグラント(こちらが一般的)
・認可コード+PKCE(フロントエンドはこっち)
・インプリシットグラント(フロントエンド向けだが、非推奨)

認可コード

認可サーバーに認可リクエストをして、成功するとアクセストークンを発行するための認可コードを発行してくれる。クライアントはそれを使ってアクセストークンを取得する

認可コードはアクセストークンの引換チケットのようなもの。

ただ、なぜアクセストークンを直接返さないのか?の理由は盗難リスクに備えて、そういう設計になっている。
実際に認可コードはセキュリティを高めるために以下のように設計されている
・有効期間が短い
・1回しか使えない

*インプリシットグラントだと、認可コードなしに直接アクセストークンが付与される

アクセストークン

クライアントがリソースサーバーへリクエストするために必要

リフレッシュトークン

アクセストークンは期限があり、基本的に短いので期限が切れたら新しいアクセストークンを取得するのに使用されるトークン
アクセストークンと一緒に発行されるが、リソースへのアクセスには使わない、あくまで更新の為に使う

アクセストークンの期限:数時間くらい
リフレッシュトークンの期限:数ヶ月とか無期限
*アクセストークンの期限が短くしてあるのは悪用を防ぐため

認可フロー

改めて認可のフローをまとめると、

  1. 認可リクエスト (Authorization Request)
    クライアントがユーザー(リソースオーナー)を認可サーバーにリダイレクトし、認可コードを要求します。
このリクエストには、クライアントID、リダイレクトURI、レスポンスタイプ(code)、および要求されるスコープが含まれます。
  2. 認可コード (Authorization Code)
    ユーザーが認可サーバーで認証し、アクセスを承認すると、認可サーバーはクライアントのリダイレクトURIに認可コードを送信します。
  3. トークンリクエスト (Token Request)
    クライアントは、認可コードを使用して認可サーバーからアクセストークンを要求します。
このリクエストには、クライアントID、クライアントシークレット、認可コード、リダイレクトURI、およびグラントタイプ(authorization_code)が含まれます。
  4. アクセストークン (Access Token)
    認可サーバーはリクエストを検証し、正当であればアクセストークンを発行し、クライアントに返します。
  5. リソースリクエスト (Resource Request)
    クライアントは、取得したアクセストークンを使用してリソースサーバーに保護リソースへのアクセスを要求します。
  6. 保護リソース (Protected Resource)
    リソースサーバーはアクセストークンを検証し、正当であれば要求された保護リソースをクライアントアプリケーションに返します。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?