アクセストークンとは
アクセストークン (
access_token とも呼ばれます) は、アプリケーションに発行された認可を表す不透明な文字列です。これは、認可情報を取得するために使用される識別子を表す場合もあれば、認可情報 (たとえば、ユーザーの ID や権限など) を検証可能な形式でそれ自体に含む場合もあります。アクセストークンは、JSON Web Tokens として実装されることがよくあります。Auth0 のアクセストークンの詳細については、Access Token を参照してください。scope クレームに含まれます。
その後、クライアントが API へのリクエスト時にアクセストークンを渡すと、API は scope クレームを確認して、その特定の API エンドポイントを呼び出すために必要な権限が付与されていることを検証できます。
Scopes とは
各アクセストークンには、クライアントに付与された権限の一覧を含めることができます。クライアントが Auth0 で認証されるときには、要求するスコープ (または権限) の一覧を指定します。それらのスコープが認可されると、アクセストークンには認可されたスコープの一覧が含まれます。たとえば、タイムシート API では、4 つの異なる認可レベルを受け付ける場合があります。タイムシートの読み取り (スコープ
read:timesheets) 、タイムシートの作成 (スコープ create:timesheets) 、タイムシートの削除 (スコープ delete:timesheets) 、タイムシートの承認 (スコープ approve:timesheets) です。クライアントが API に新しいタイムシートエントリーの作成を要求する場合、アクセストークンには create:timesheets スコープが含まれている必要があります。同様に、既存のタイムシートを削除するには、アクセストークンに delete:timesheets スコープが含まれている必要があります。スコープの詳細については、Scopes を参照してください。OAuthの役割
OAuth 2.0 のフローには、次の役割があります。
- Resource Owner: 保護されたリソースへのアクセスを許可できる主体です。通常はエンドユーザーです。
- Resource Server: 保護されたリソースをホストするサーバーです。つまり、アクセス先の API です。
- Client: Resource Owner に代わって、保護されたリソースへのアクセスを要求するアプリケーションです。
- 認可サーバー: Resource Owner を認証し、適切な認可を得た後でアクセストークンを発行するサーバーです。この場合は Auth0 の Authentication API です。
Proof Key for Code Exchange (PKCE)
authorization_code を傍受し、それを アクセストークン (場合によっては リフレッシュトークン も) に交換してしまう可能性があります。
Proof Key for Code Exchange (PKCE) は、 (RFC 7636 で定義されている) この認可コード傍受攻撃を軽減するための手法です。
PKCE では、アプリケーションは認可リクエストごとに、code_verifier と呼ばれる暗号学的にランダムなキーと、その変換後の値である code_challenge を生成し、authorization_code を取得するために Auth0 に送信します。アプリケーションが authorization_code を受け取ると、要求したトークンと引き換えに、その code と code_verifier を Auth0 の に送信します。

- ネイティブアプリがフローを開始し、
code_challengeパラメーターとcode_challenge_methodパラメーターを送信して、ユーザーを Auth0 (具体的には /authorize エンドポイント) にリダイレクトします。 - Auth0 は、クエリ文字列に
authorization_codeを含めて、ユーザーをネイティブアプリにリダイレクトします。 - ネイティブアプリは、
authorization_codeとcode_verifierを、redirect_uriおよびclient_idとともに Auth0 に送信します。これは /oauth/token エンドポイント を使用して行います。 - Auth0 はこの情報を検証し、アクセストークン (必要に応じてリフレッシュトークンも) を返します。
- ネイティブアプリは、ユーザーに代わって API を呼び出すためにアクセストークンを使用できます。
Refresh Token Rotation を有効にしている場合は、リクエストごとに新しいリフレッシュトークンが生成され、アクセストークンとともに発行されます。リフレッシュトークンが交換されると、以前のリフレッシュトークンは無効化されますが、その関連情報は認可サーバーによって保持されます。