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 2.0 認可コードグラント

Posted at

概要

認可コードグラントは、サーバーサイド Web アプリケーションで使用される最も一般的で安全な認可フローです。以下に具体的な手順を示します。

認可フローの手順

1. 認可リクエスト

クライアントアプリケーションがユーザーを Google の認証画面にリダイレクトします。

リクエスト URL

GET https://accounts.google.com/o/oauth2/auth
    ?response_type=code
    &client_id=264656200720-6t0qi4g8aa9lfe9fcthmlid79grv752a.apps.googleusercontent.com
    &state=abcd
    &scope=https://www.googleapis.com/auth/calendar.events
    &redirect_uri=http://localhost/callback

パラメータ一覧

パラメータ 説明 必須
response_type 認可コードグラントフローを示す(code固定)
client_id アプリケーションの識別子
state CSRF 攻撃を防ぐためのランダムな文字列
scope 要求する権限の範囲
redirect_uri 認可後のコールバック URL

2. 認可レスポンス

ユーザーが認証・認可を完了すると、指定された redirect_uri にリダイレクトされます。

レスポンス URL

GET http://localhost/callback
    ?state=abcd
    &code=4/0AanRRrvi_umBD4TsbKWrI9u4sWX1fpd3b5ScGS8WNFIGW4g7ESGHbFu2-oyOysmC98y-FA
    &scope=https://www.googleapis.com/auth/calendar.events

検証項目

  • state パラメータが元のリクエストと一致することを確認
  • 認可コードは一時的なもので、速やかにアクセストークンと交換する必要がある

3. アクセストークン取得リクエスト

認可コードをアクセストークンと交換します。このリクエストはサーバーサイドで実行する必要があります。

リクエスト仕様

POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

code=4/0AanRRrvi_umBD4TsbKWrI9u4sWX1fpd3b5ScGS8WNFIGW4g7ESGHbFu2-oyOysmC98y-FA
&client_id=264656200720-6t0qi4g8aa9lfe9fcthmlid79grv752a.apps.googleusercontent.com
&client_secret=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
&grant_type=authorization_code
&redirect_uri=http://localhost/callback

セキュリティ要件

  • client_secretは機密情報として扱い、公開しない
  • POST メソッドを使用する
  • HTTPS で通信する

4. アクセストークンレスポンス

認可サーバーからアクセストークンが返されます。

レスポンス例

{
  "access_token": "ya29.a0ARW5m75ZAP2xtxUVzXlS7vFcWZzBeVg_xvNCS0bBdFZ-z1emAMUjxKrcXr6Ly2mjKpwpFfZ2x1j8fPUvWzupBKvOc5UMIM37weOHDNwrkQUIizTBlDI2Owdj254MCQI93meddH21PzSoL-7rNPpvyLRFpfBlMT7aWs6bQithaCgYKAcMSARMSFQHGX2Mi-fBl3zfiMH-Ws5FMa3rONA0175",
  "expires_in": 3599,
  "scope": "https://www.googleapis.com/auth/calendar.events",
  "token_type": "Bearer"
}

レスポンスパラメータ

パラメータ 説明
access_token API リクエストに使用するトークン
expires_in トークンの有効期限(秒)
scope 付与された権限の範囲
token_type トークンの種類(通常は"Bearer")

セキュリティ上の重要なポイント

1. クライアントシークレットの保護

  • 絶対に公開しない
  • サーバーサイドでのみ使用
  • 環境変数などで安全に管理

2. state パラメータの使用

  • CSRF 攻撃を防ぐため必ず使用
  • 十分にランダムな値を使用
  • 検証を必ず行う

3. 認可コードの取り扱い

  • 一回限りの使用
  • 速やかにアクセストークンと交換
  • 有効期限は短い(通常数分)

4. アクセストークンの管理

  • セキュアに保存
  • 有効期限の管理
  • 必要に応じて更新
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?