アプリケーションの実装(サーバーアプリ + API)

このシュートリアルのセクションでは、APIとそれに関連するマシンツーマシンアプリケーションについて掘り下げてみたいと思います。最初から始めたい方は、「APIを使用したサーバーアプリケーション」をお読みください。

APIエンドポイントを定義する

APIエンドポイントはリソース(データの集合)を表す静的URIです。

たとえば、レストランAPIには/orders/customersなどのエンドポイントがあるかもしれません。このAPIに接続するアプリケーションは、関連するHTTPメソッド(POSTGETPUTPATCHDELETE)を使ってAPIエンドポイントを呼び出すことにより、CRUD操作(作成、読み取り、更新、削除)を実行することができます。

ExampleCoのTimesheets APIでは、エンドポイントを構成してタイムシートエントリを作成する必要があります。

HTTPメソッド APIエンドポイント 説明
POST /timesheets/upload 新しいタイムシートエントリを作成する

{
  'user_id': '007',
  'date': '2017-05-10T17:40:20.095Z',
  'project': 'StoreZero',
  'hours': 5
}

Was this helpful?

/

APIは要求を正しく処理すると、HTTP 201 Createdステータスコードともに、JSONオブジェクトを含んだボディーを返します。このJSONオブジェクトには、新規作成されたタイムシートを記述するメッセージプロパティが含まれています。

{
"message": "Created timesheet 14 for employee 007."
}

Was this helpful?

/

APIエンドポイントを保護する

APIエンドポイントを保護するには、APIアプリケーション内でミドルウェア関数を実装し、トークンを処理する必要があります。この関数は、トークンがAPI要求に含まれているかを確認し、トークンを検証してから、要求されたアクションの実行に必要なスコープの有無を確認します。

すべての条件が満たされると、APIアプリケーションは前に述べたメッセージで応答します。提供されたアクセストークンに問題がある(またはまったく提供されていない)場合は、APIアプリケーションがHTTP 401 Unauthorizedステータスコードを送信します。

Node.jsでの実装を参照してください。

アクセストークン取得する

アプリケーションのサンプル実装を使うことなくアクセストークンを取得するには、以下のペイロードでAuth0 Authentication APIのトークン取得エンドポイントを呼び出します。

codeblockOld.header.login.configureSnippet
{
  audience: "{yourApiIdentifier}",
  grant_type: "client_credentials",
  client_id: "${account.client_id}",
  client_secret: "${account.client_secret}"
}

Was this helpful?

/

アプリケーションの権限を確認する

アクセストークンでAPIのエンドポイントはセキュリティ保護されましたが、APIを呼び出すプロセスに新しいタイムシートのエントリをPOSTする権限があるかは未確認のままです。

前述のように、それぞれのアクセストークンには、アプリケーションに付与されたアクセス権限のリストが含まれます。これらの権限は、scope要求パラメーターを使って定義されます。これを構成する方法については、「スコープを構成する」記述のある段落をお読みください。

エンドポイントには、batch:uploadスコープが必要です。

Node.jsでの実装を参照してください。

マシンツーマシンアプリケーションを実装する

このセクションでは、シナリオでマシンツーマシンアプリケーションを実装する方法について説明します。

アクセストークン取得する

まず、Auth0の/oauth/token APIエンドポイントを呼び出して、アクセストークンを取得します。

このためには、アプリケーションの設定にある以下の構成値が必要です。

  • Domain(ドメイン):Auth0ドメイン(テナント識別子でもある)です。この値は、APIのURL「https://{yourTenant}/oauth/token」の一部になります。

  • Audience(オーディエンス):API識別子です。

  • Client ID(クライアントID):Auth0アプリケーションのクライアントIDです。

  • Client Secret(クライアントシークレット):Auth0アプリケーションのクライアントシークレットです。

実装では、以下ような形式のペイロードを使って、POST操作をhttps://{yourDomain}/oauth/tokenエンドポイントに対して行います。

codeblockOld.header.login.configureSnippet
{
  "audience": "{yourApiIdentifier}",
  "grant_type": "client_credentials",
  "client_id": "${account.client_id}",
  "client_secret": "${account.client_secret}"
}

Was this helpful?

/

詳細については、「クライアントの資格情報フローを使用してAPIを呼び出す」を参照してください。

Pythonの実装を参照してください。

APIを呼び出す

有効なスコープのあるアクセストークンを取得したら、APIを呼び出すことができます。

そのためには、以下を行います。

  • コードに埋め込まれたタイムシートエントリをJSON形式で構築する

  • アクセストークンをAuthorizationヘッダーとして要求に追加する

  • HTTP POST要求を行う

  • 応答を解析し、ターミナルに出力する(任意)

Pythonの実装を参照してください。