簡単にするため、この実装では認証と認可のみに焦点を当てます。サンプルで示すように、入力するタイムシートの項目はハードコードされており、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 とその生成に使用したメソッドを指定して、ユーザーを authorization URL にリダイレクトする必要があります。
認可 URL への GET リクエストには、次の値を含める必要があります。
Android での実装を見る
認証情報を取得する
authorization_codeを、APIの呼び出しに使用できるアクセストークンと交換できます。以下のデータを含めて、Token URLにPOSTリクエストを送信します。
Token URL からのレスポンスには、次が含まれます。
- access_token:
audienceで指定した API のアクセストークン。 - refresh_token: Refresh Token は、
offline_accessスコープを含め、さらに Dashboard で API の Allow Offline Access を有効にした場合にのみ含まれます。 - id_token: ユーザープロフィール情報を含む JWT。
- token_type: トークンの種類を示す文字列で、常に Bearer トークンです。
- expires_in: アクセストークンの有効期限が切れるまでの秒数。
ユーザープロファイルを取得する
スコープに基づいて UI 要素を条件付きで表示する
scopeに応じて、特定の UI 要素を表示または非表示にしたい場合があります。ユーザーに発行されたスコープを確認するには、ユーザーの認証時に付与されたscopeを調べる必要があります。これはすべてのスコープを含む文字列であるため、この文字列に必要なscopeが含まれているかどうかを確認し、その結果に基づいて特定の UI 要素を表示するかどうかを判断する必要があります。
Android での実装を見る
API を呼び出す
Bearer スキームを使用して、Authorization ヘッダーにアクセストークンを指定します。
Android での実装を見る。
トークンを更新する
/oauth/token エンドポイントに POST リクエストを送信します。
Refresh Token が含まれるのは、前回の認可リクエストに offline_access スコープを含め、Auth0 Dashboard で API に対して Allow Offline Access を有効にしている場合のみです。
リクエストには次を含める必要があります。
レスポンスには、新しい アクセストークン が含まれます。