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 WebServer with PKCE flow

0
Last updated at Posted at 2025-12-10

データローダーの64.1から使えるみたいですが、今一つよくわからない

OAuth 2.0 の Web Server Flow with PKCE (Proof Key for Code Exchange) は、従来の Authorization Code Flow に PKCE を組み合わせた仕組みで、セキュリティを強化するために使われます。特に SPA (Single Page Application) や モバイルアプリなど、クライアントシークレットを安全に保持できない環境で有効です。

処理の流れ

  1. クライアントが認可リクエストを送信
  • クライアント(Webサーバー)は認可サーバーにリクエストを送ります。
  • このとき code_challenge(PKCEの一部)を含めます。
  • code_challenge は code_verifier をハッシュ化した値(通常は SHA256)
GET /authorize?
    response_type=code
    &client_id=CLIENT_ID
    &redirect_uri=REDIRECT_URI
    &scope=openid profile
    &state=xyz
    &code_challenge=HASHED_VERIFIER
    &code_challenge_method=S256

2. ユーザー認証 & 認可コード発行

  • 認可サーバーはユーザー認証後、authorization_code をクライアントに返します。

3. トークンリクエスト

  • クライアントは authorization_code と code_verifier を使ってトークンエンドポイントにアクセスします。
  • 認可サーバーは code_verifier をハッシュ化し、最初に送った code_challenge と一致するか確認します。
POST /token
    grant_type=authorization_code
    &code=AUTH_CODE
    &redirect_uri=REDIRECT_URI
    &client_id=CLIENT_ID
    &code_verifier=ORIGINAL_VERIFIER

4. アクセストークン発行

  • 検証が成功すると、アクセストークン(+リフレッシュトークン)を返します。

PKCEの役割

  • 通常の Authorization Code Flow は「認可コード奪取攻撃」に弱い。
  • PKCE は code_verifier と code_challenge により、攻撃者が認可コードを盗んでもトークン交換できないようにする。

特徴

  • Web Server Flow はサーバー側でトークンを安全に管理できる。
  • PKCE は 追加のセキュリティ層で、モバイルやSPAだけでなく、Webサーバーでも推奨。

PKCE (Proof Key for Code Exchange) は、OAuth 2.0 の認可コードフローを安全にするための仕組みであり、ユーザー名やパスワードは不要です。

エラーメッセージに「use Username Password」と出る理由
これは、PKCEフローが失敗した場合に、フォールバックとしてリソースオーナーパスワード認証(ROPC)を使えという意味です。

これもフローは成功してそうなんだけど、データローダではエラーです。トークンが取得できていないのかもしれない

関連

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?