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?

認可グラントタイプの種類と特徴

Last updated at Posted at 2024-12-30

1. 認可コードグラント

最も一般的で安全な認可フロー。主にサーバーサイドアプリケーション(コンフィデンシャルクライアント)で使用されます。

特徴

  • アクセストークンとリフレッシュトークンの両方を取得可能
  • フロントエンドには認可コードのみを渡し、アクセストークンはサーバーサイドで管理
  • 認可コードは一時的なものであり、不正利用された場合のリスクを最小限に抑制

2. インプリシットグラント

フロントエンドアプリケーション(パブリッククライアント)向けに設計されたフロー。ただし、セキュリティリスクが高いため現在は非推奨です。

特徴

  • 認可コードを使用せず、直接アクセストークンを取得
  • リダイレクト URL にアクセストークンが露出
  • リフレッシュトークンは取得不可

インプリシットグラントの実装例

  1. 認可リクエスト
GET https://accounts.google.com/o/oauth2/auth
    ?response_type=token
    &client_id=xxx.apps.googleusercontent.com
    &state=abcd
    &scope=https://www.googleapis.com/auth/calendar.events
    &redirect_uri=http://localhost/callback

2. 認可レスポンス

以下の認可レスポンスでは、URL内に直接アクセストークンが含まれているのが分かります。
これによる漏洩が高いセキュリティリスクに繋がります。

GET http://localhost/callback
    #access_token=ya29.a0ARW5m75tvsHFVGFS4...
    &token_type=Bearer
    &expires_in=3599
    &scope=https://www.googleapis.com/auth/calendar.events

パブリッククライアントの推奨実装:PKCE

インプリシットグラントに代わる安全な方法として、PKCE を使用した認可コードグラントが推奨されています。

PKCE の仕組み

PKCE は、認可リクエストとトークン取得リクエストの関連性を証明する仕組みを提供します。

主要な要素

  1. code_verifier:クライアントが生成するランダムな文字列
  2. code_challenge:code_verifier から生成された検証用の値
  3. code_challenge_method:変換方法の指定(plain or S256)

実装手順

  1. 認可リクエスト時

    • 通常の認可コードグラントのパラメータに加えて
    • code_challengecode_challenge_methodを追加
  2. トークン取得時

    • 通常の認可コードグラントのパラメータに加えて
    • code_verifierを追加

この方法により、パブリッククライアントでも安全に認可コードグラントを利用できます。

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?