PKCEで顧客を認証する
S256 PKCE を使用した ShareAI 認可コードフローを実装し、state を検証してコードをアプリケーションのバックエンドで交換します。
このページについて
このフローは、1つの顧客アカウントをアプリケーションに接続します。顧客はサインインし、個人または組織アカウントを選択して、要求された権限を承認します。その後、バックエンドが短期間有効なコードをトークンに交換します。
始める前に#
完了 アプリケーション登録。正確に登録されたコールバック、サーバー保持のクライアント資格情報、および認可を完了するブラウザ用のサーバーサイドセッションが必要です。
1. 認可リクエストを作成する#
https://auth.shareai.now/oauth/authorize顧客にアプリケーションの認可を求めてください。
- ベースURL
https://auth.shareai.now- 認証
- ブラウザリダイレクト; 登録済みアプリケーション
各試行ごとに新しい verifier、state、nonce を生成します。それらを開始ユーザーのサーバーサイドセッションに保存します。SHA-256 チャレンジをブラウザリダイレクトで送信し、verifier は送信しないでください。アプリケーションが必要とするスコープのみをリクエストしてください。
Python
import base64
import hashlib
import secrets
import urllib.parse
verifier = secrets.token_urlsafe(48)
challenge = base64.urlsafe_b64encode(hashlib.sha256(verifier.encode()).digest()).rstrip(b"=").decode()
state = secrets.token_urlsafe(32)
nonce = secrets.token_urlsafe(32)
# Store verifier, state and nonce in the user's server-side session.
params = {
"response_type": "code",
"client_id": "YOUR_CLIENT_ID",
"redirect_uri": "https://app.example.com/auth/shareai/callback",
"scope": "openid profile surcharge",
"state": state,
"nonce": nonce,
"code_challenge": challenge,
"code_challenge_method": "S256",
}
print("https://auth.shareai.now/oauth/authorize?" + urllib.parse.urlencode(params))
TypeScript
import { randomBytes, createHash } from "node:crypto";
const verifier = randomBytes(48).toString("base64url");
const state = randomBytes(32).toString("base64url");
const nonce = randomBytes(32).toString("base64url");
const challenge = createHash("sha256").update(verifier).digest("base64url");
// Save verifier, state and nonce in the initiating server-side session.
const params = new URLSearchParams({ response_type: "code", client_id: "YOUR_CLIENT_ID",
redirect_uri: "https://app.example.com/auth/shareai/callback",
scope: "openid profile surcharge", state, nonce,
code_challenge: challenge, code_challenge_method: "S256" });
const authorizationUrl = `https://auth.shareai.now/oauth/authorize?${params}`;
// Redirect the browser to authorizationUrl.
2. コールバックを検証する#
認可が拒否された場合、OAuth エラーを通常のキャンセルとして処理してください。それ以外の場合は、コードを使用する前に返された state 値を保存された値と比較してください。state が欠落しているか一致しない場合は拒否してください。保存された state は一度だけ使用し、別のブラウザセッションから送信されたコールバック URL は受け入れないでください。
3. コードを交換する#
https://auth.shareai.now/oauth/token一度だけ使用可能なコードと一致する PKCE verifier を交換します。
- ベースURL
https://auth.shareai.now- 認証
- 機密クライアント認証
cURL
curl --fail-with-body "https://auth.shareai.now/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=authorization_code" \
--data-urlencode "client_id=$SHAREAI_CLIENT_ID" \
--data-urlencode "client_secret=$SHAREAI_CLIENT_SECRET" \
--data-urlencode "code=$AUTHORIZATION_CODE" \
--data-urlencode "redirect_uri=https://app.example.com/auth/shareai/callback" \
--data-urlencode "code_verifier=$PKCE_VERIFIER"
クライアントに設定されたクライアント認証方法を使用してください。この例ではフォームベースのクライアント認証を使用しています。同じコードを2回送信しないでください。消費済みまたは期限切れのコードの後は、認可を再開始してください。
4. 結果を保存し、アプリのセッションを確立する#
アクセストークンとリフレッシュトークンをバックエンドに保存します。返された expires_in トークンを使用し、永続的なトークンを仮定しないでください。ID トークンを使用する場合は、発行者の JWKS、期待される発行者、クライアントオーディエンス、有効期限、および元の nonce を使用して署名を検証し、クレームを信頼する前に確認してください。
ライフサイクルを続行する#
最終更新日 2026年9月15日