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について

Last updated at Posted at 2025-04-20

OAuthとは

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

異なるサービス間での認証や情報共有を安全に、かつ簡単に行うための標準プロトコルで、多くのWebサービスやアプリケーションで使用されている。

活用事例
ユーザーが自分のアカウントパスワードを共有せずに、サードパーティのアプリケーションに自分のデータ(X、Googleなど)へアクセスできる

Google, Facebookなどのソーシャルログイン(ID,PWが不要でログインできる)など

OAuthを利用するメリット

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

認証と認可の違い

  • 認証(Authentication)
    ユーザーの身元を確認すること

  • 認可(Authorization)
    ユーザーにリソースにアクセスする権利を与えること

OAuthの仕組み

構成

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

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

  • 認可サーバー(X API、Google APIなど)
    リソースオーナーを認証し、クライアントにアクセストークンを発行する
    OAuth2.0において最も重要な役割を果たす
    このサーバーは、クライアントからのアクセストークンのリクエストを受信し、認証が成功してリソースオーナーから合意を得たら、アクセストークンを発行します。
    認可サーバーは、2つのエンドポイントを公開します。
    ・認可エンドポイント:インタラクティブな認証とユーザーの合意を取り扱う
    ・トークンエンドポイント:マシンtoマシンに関与する

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

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

認可グラントタイプ

クライアントがアクセストークンを取得する方法

  • 認可コードグラント
  • 認可コード+PKCE
  • インプリシットグラント

認可コード

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

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

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

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

*PKCEについて
PKCE(Proof Key for Code Exchangeの略で、呼び方はピクシー)は、OAuth2.0の拡張使用で、認可コード横取り攻撃を防止するセキュリティの強化手法。認可コードフローのフロー自体を変えるものではなく、認可コード横取り攻撃への対策を追加する。

アクセストークンとリフレッシュトークン

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

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

  • アクセストークンの期限:数時間くらい
  • リフレッシュトークンの期限:数ヶ月とか無期限もある

*アクセストークンの期限が短くしてあるのは悪用を防ぐため

認可コードフロー

  1. クライアント(アプリ)がリソースオーナー(ユーザー)を認可サーバーにリダイレクトし、認可画面が表示される
  2. ユーザーがアクセスを承認すると認可サーバーに認可リクエストが送られる
  3. 認可サーバーはクライアントのリダイレクトURIに認可コードを送信
  4. クライアントは、認可コードを使用して認可サーバーからアクセストークンを要求する(トークンリクエスト)
  5. 認可サーバーはリクエストを検証し、正当であればアクセストークンを発行し、クライアントに返す
  6. クライアントは、取得したアクセストークンを使用してリソースサーバーに保護リソースへのアクセスを要求
  7. リソースサーバーはアクセストークンを検証し、正当であれば要求された保護リソースをクライアントに返す

Frame 1 (1).png

こちらの記事で、OAuth2.0フローPKCEで X APIのアクセストークンを実際に取得する流れ、PKCEの詳細などを記事にしています。

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

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?