簡単にするため、この実装では認証と認可のみに焦点を当てます。サンプルで示すように、入力するタイムシートのエントリはハードコードされており、API はそのエントリを永続化しません。代わりに、一部の情報をそのまま返すだけです。
API エンドポイントを定義する
API エンドポイントとは
API エンドポイントは、オブジェクトを表す一意の URL です。このオブジェクトを操作するには、アプリケーションからその URL を指定する必要があります。たとえば、注文または顧客を返す API がある場合は、
/orders と /customers という 2 つのエンドポイントを設定できます。アプリケーションは、異なる HTTP メソッドを使ってこれらのエンドポイントとやり取りします。たとえば、POST /orders で新しい注文を作成し、GET /orders で 1 件以上の注文のデータセットを取得できます。/timesheets エンドポイントに対する HTTP GET リクエストにより、ユーザーは自分のタイムシートを取得できます。また、/timesheets エンドポイントに対する HTTP POST リクエストにより、ユーザーは新しいタイムシートを追加できます。
実装については、Node.js を参照してください。
エンドポイントを保護する
Missing or invalid token エラーメッセージを返してリクエストを拒否する必要があります。
API が実行すべき検証は次のとおりです。
- が正しい形式であることを確認する
- 署名を確認する
- 標準クレームを検証する
JWT.io には、JWT の解析、署名の検証、クレームの検証といった処理の大部分を実行できるライブラリの一覧があります。
クライアントの権限を確認する
ユーザーの識別情報を特定する
sub クレームがあり、これはクレームの対象となる主体を識別します。Implicit Grant フローでは、このクレームにユーザーの識別情報が含まれます。これは Auth0 ユーザーの一意の識別子です。これを使うことで、外部システム内の任意の情報を特定のユーザーに関連付けることができます。
また、カスタムクレームを使用して、ユーザーの別の属性 (メールアドレスなど) をアクセストークンに追加し、それを使ってユーザーを一意に識別することもできます。
実装については、Node.js を参照してください。
モバイルアプリを実装する
code_challenge とその生成に使用したメソッドを付けて、ユーザーを 認可 URL にリダイレクトする必要があります。
認可 URL への GET リクエストには、次の値を含める必要があります。
| Parameter | Description |
|---|---|
| client_id | Auth0 のクライアントIDの値です。Auth0 Dashboard の Application の Settings から取得できます。 |
| audience | API Identifier の値です。Auth0 Dashboard の API の Settings から取得できます。 |
| scope | IDトークンとアクセストークンで返されるクレームを決定するスコープです。たとえば、openid スコープを指定すると、レスポンスに IDトークン が含まれます。このモバイルアプリの例では、次のスコープを使用します: create:timesheets read:timesheets openid profile email offline_access。これらのスコープにより、モバイルアプリは API を呼び出し、リフレッシュトークン を取得し、IDトークンでユーザーの name、picture、email クレームを受け取ることができます。 |
| response_type | 使用する認証フローを示します。PKCE を使用するモバイルアプリケーションでは、code に設定する必要があります。 |
| code_challenge | code verifier から生成した code challenge です。code challenge の生成手順はこちらを参照してください。 |
| code_challenge_method | challenge の生成に使用する方式です。Auth0 でサポートされているのは S256 のみです。 |
| redirect_uri | ユーザーが認可を許可した後に、Auth0 がブラウザーをリダイレクトする URL です。認可コードは URL パラメーター code で取得できます。この URL は、Application’s Settings で有効なコールバック URL として設定する必要があります。 |
認証情報を取得する
authorization_codeを、API の呼び出しに使用できるアクセストークンと交換できます。以下のデータを含めて、トークンURL にPOSTリクエストを送信します。
| パラメーター | 説明 |
|---|---|
| grant_type | authorization_code に設定する必要があります。 |
| client_id | Auth0 クライアントID の値です。Auth0 Dashboard のアプリケーション設定から確認できます。 |
| code_verifier | 認可 URL (/authorize) に渡す code_challenge の生成に使用した、暗号学的にランダムなキーです。 |
| code | 前回の /authorize 呼び出しで受け取った authorization_code です。 |
| redirect_uri | この URL は、前のセクションで /authorize に渡した redirect_uri と一致している必要があります。 |
- access_token: API 用のアクセストークンです。
audienceで指定します。 - refresh_token: リフレッシュトークン は、
offline_accessスコープを含め、かつ Dashboard で API に対して Allow Offline Access を有効にした場合にのみ返されます。 - id_token: ユーザープロファイル情報を含む JWT。
- token_type: トークンの種類を表す文字列で、常に Bearer です。
- expires_in: アクセストークンの有効期限が切れるまでの秒数。
ユーザープロファイルを取得する
スコープに基づいて UI 要素を条件付きで表示する
scopeに応じて、特定の UI 要素を表示または非表示にできます。ユーザーに発行されたスコープを確認するには、ユーザーの認証時に付与されたscopeを調べる必要があります。scopeはすべてのスコープを含む文字列であるため、必要なscopeが含まれているかを確認し、その結果に応じて特定の UI 要素を表示するかどうかを判断します。
Android での実装を参照
API を呼び出す
Authorization ヘッダーで Bearer スキームを使用してアクセストークンを送信します。
Android での実装を参照してください。
トークンを更新する
/oauth/token エンドポイントに POST リクエストを送信します。
リフレッシュトークン が含まれるのは、前回の認可リクエストに offline_access スコープを含め、Auth0 Dashboard で API の Allow Offline Access を有効にしている場合のみです。
リクエストには次の内容を含める必要があります。
| パラメーター | 説明 |
|---|---|
| grant_type | refresh_token に設定する必要があります。 |
| client_id | Auth0 のクライアントIDの値です。Auth0 Dashboard のアプリケーション設定から取得できます。 |
| refresh_token | 前回の認証結果から取得した、使用するリフレッシュトークンです。 |