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?

SPA(Single Page Application)の最適なOIDC認証認可フロー「Authorization Code Flow with PKCE」

Posted at

SPA(Single Page Application)とWeb APIで構成されるWebアプリケーションにOIDC(OpenID Connect)認証フローを導入する場合、主に Authorization Code Flow with PKCE (Proof Key for Code Exchange) を採用するのが一般的で、推奨されます。

なぜ Authorization Code Flow with PKCE が適しているのか?

SPAはブラウザで直接実行されるため、クライアントシークレットを安全に保管できないという制約があります。従来のAuthorization Code Flowではクライアントシークレットを必要とするため、SPAのようにシークレットを安全に保持できないアプリケーションには不適切です。PKCEはこの問題を解決するために追加された仕組みで、クライアントシークレットを不要にし、代わりに「コードチャレンジ」と「コードバリファイア」という値を利用して認可コードの盗聴や悪用を防ぎます。

Authorization Code Flow with PKCE の流れ

  1. リクエストの生成
    SPAは認可サーバーに認証リクエストを送信します。このとき、ランダムなコードバリファイアを生成し、それをハッシュ化した「コードチャレンジ」を認可サーバーに送ります。
  2. 認証と認可コードの取得
    ユーザーが認証されると、認可サーバーはSPAに「認可コード」を返します。この段階ではアクセストークンは発行されません。
  3. アクセストークンの取得
    SPAは、取得した認可コードとコードバリファイアを使用して認可サーバーにアクセストークンをリクエストします。認可サーバーは、コードチャレンジとコードバリファイアを比較し、検証が成功すればアクセストークンとIDトークンを返します。
  4. トークンの利用
    SPAは、取得したアクセストークンを用いてWeb APIにアクセスし、認証されたリクエストを送信します。IDトークンは、ユーザー情報を含んでおり、ユーザー認証に関する情報を含んでいます。

このフローのメリット

  • 安全性が高い:PKCEにより、認可コードの盗聴や改ざんのリスクを減らし、より安全にSPAで認証を実行できます。
  • クライアントシークレットが不要:SPAはブラウザ上で実行されるため、サーバーサイドと異なりシークレット情報を保持できないため、PKCEを利用することで安全に認証フローを行えます。
  • OAuth 2.1に準拠:最新のOAuth仕様にも適合しており、標準化された安全なフローです。

注意点

  • PKCE対応の認可サーバーが必要ですが、主要な認証プロバイダー(Auth0、AWS Cognito、Azure AD B2C、Oktaなど)はPKCEをサポートしています。
  • ブラウザのセキュリティ設定やフロントエンドフレームワークに適した実装が必要です。

結論として、SPAとWeb APIで構成されたWebアプリケーションにOIDCを導入する際は、Authorization Code Flow with PKCE を選択するのがベストプラクティスです。

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?