このページは Authlete 3.0 用です。2.x については こちらのページ をご覧ください。認可・トークン・イントロスペクションの API は API リファレンス で試すこともできます。
前書き
このチュートリアルでは、OAuth 2.0 の認可コードグラントフローをサポートする認可サーバーを実装するために Authlete API を使用する基本的な方法を説明します。また、リソースサーバーがアクセス トークンを迅速に検証し、安全で認可された API へのアクセスを提供するために Authlete API を使用する方法も示します。 前提条件:- OAuth 2.0 の基本的な知識
- Authlete アカウントへのアクセス権 (必要に応じてサインアップはこちら)。
コンポーネント
一般的な OAuth 2.0 アーキテクチャには、以下のフロー図に示すように、複数のコンポーネントが含まれます。このチュートリアルでは、Authlete 管理コンソール と、米国リージョンで稼働する Authlete API クラスター (https://us.authlete.com) のパブリッククラウドバージョンを使用します。認可サーバーおよびリソースサーバーは curl コマンドを使用してシミュレートし、認可、トークン発行、およびイントロスペクションのために Authlete へ API リクエストを行う方法を示します。
各コンポーネントの FQDN は以下の通りです。認可サーバーおよびクライアントは curl でシミュレーションするため実際には FQDN は利用されませんが、以下の値を使用して OAuth フローを説明します。
| コンポーネント | FQDN |
|---|---|
| Authlete API - 米国クラスター | us.authlete.com |
| Authlete 管理コンソール | console.authlete.com |
| 認可サーバー | as.example.com |
| クライアント | client.example.org |
| リソースサーバー | N/A |
環境セットアップ
クイックスタート、およびクライアントの作成に従って、新しい Authlete サービスとクライアントを作成してください。以下の入力欄に値を入れると、下の curl 例が自動で更新されます。| Authlete API - 米国クラスター | |
| サービス ID | |
| サービスアクセストークン | |
| クライアント ID | |
| クライアントシークレット | |
| リダイレクト URI | |
| クライアントタイプ | CONFIDENTIAL |
| クライアント認証方法 | CLIENT_SECRET_BASIC |
ウォークスルー
以下のシーケンス図は、このチュートリアルで使用される OAuth 2.0 フロー全体を示しています。各ステップを進める際に参照してください。クライアントから認可サーバーへの認可リクエスト
クライアントは、ユーザーエージェントを介して認可サーバーに認可リクエストを行います(ステップ 3 および 4)。 このチュートリアルでは、以下の値がリクエストのパラメータとして指定されているものと仮定します。環境セットアップの入力欄の値が下表と下文に反映されます。| パラメータ | 値 |
|---|---|
client_id | |
response_type | code |
redirect_uri |
shell
- クライアント ID 「」に関連付けられたクライアントが認可サーバーに登録されていることを確認する。
- リダイレクト URI 「」がクライアントに登録された URI のいずれかと一致することを確認する。
response_typeやscopeなどの他のパラメータ値がクライアントによってリクエスト内で指定されることが許可されていることを確認する。
/auth/authorization API は、認可サーバーに代わってこれらのリクエスト検証を実行します。
以下の curl コマンドを使用して Authlete API に認可リクエストを行います(ステップ 5)。入力欄の値を変えるとコマンドが自動で更新されます。
Linux / Mac:
bash
powershell
json
resultMessageは、リクエスト処理の結果を人間が読める形式で提供します(詳細は Authlete の結果コードの解釈 を参照)。actionは、認可サーバーが次に何を行うべきかを示します。ticketは、次のステップで別の API にリクエストを行うために認可サーバーが必要とする値です。
ユーザー認証とアクセス許可の確認
リソース所有者と認可サーバーの間の実際のやり取りは、このチュートリアルの範囲外です。通常、認可サーバーはユーザーの資格情報(例: ID とパスワード)を使用してユーザーを認証し、ユーザーの役割や権限を特定し、クライアントにアクセスを許可するかどうかを尋ねます(ステップ 7、8、9)。認可コードの発行
認可サーバーが次の状態に達したと仮定します。- 認可サーバーはリソース所有者を認証し、
subjectパラメータの値として Authlete に共有する識別子がjohn.s@example.comであると判断しました。 - 認可サーバーはリソース所有者の同意を得ました。
/auth/authorization/issue にリクエストを行い、認可コードを発行します。この際、subject および /auth/authorization API 応答の ticket の値をリクエストパラメータとして含めます(ステップ 10)。以下の入力欄に値を入れると、curl と API Explorer 用 JSON が更新されます。
| チケット |
| サブジェクト |
bash
powershell
json
resultMessageは、リクエスト処理の結果を人間が読める形式で提供します(詳細は Authlete の結果コードの解釈 を参照)。actionは、認可サーバーが次に何を行うべきかを示します。この応答ではLOCATIONという値が指定されており、認可サーバーはユーザーエージェントにリダイレクト応答を返す必要があります。responseContentは、認可サーバーからの応答内容を表します。
/auth/authorization/fail API は、クライアントに送信されるメッセージや応答の転送方法に関する終了プロセスをサポートします。
要約すると、認可サーバーは通常、ユーザー認証および同意の結果に応じて /auth/authorization/issue または /auth/authorization/fail API のいずれかにリクエストを送信します。
トークンリクエスト
ここでは、ユーザーエージェントが認可サーバーからのリダイレクト応答を受信したものと仮定します。その後、以下のようなリクエストがクライアントに送信されます(ステップ 13)。(可読性のため折り返しを追加しています。入力欄の認可コードを入れると下の GET が更新されます。) 以下の入力欄に認可コード(前ステップの応答で得たcode)を入れると、curl が更新されます。
| 認可コード (code) |
http
code パラメータの値を抽出し、この値を使用してトークンリクエストを作成し、以下のように認可サーバーに送信します。このチュートリアルでは、https://as.example.com/token をトークンエンドポイント URI と仮定します(ステップ 14)。入力欄の値が反映されます。
http
/auth/token API を使用してリクエストを評価し、応答を生成します。
Linux / Mac:
bash
powershell
json
resultMessageは、リクエスト処理の結果を人間が読める形式で提供します(詳細は Authlete の結果コードの解釈 を参照)。actionは、認可サーバーが次に何を行うべきかを示します。この応答ではOKという値が指定されており、認可サーバーはクライアントにトークン応答を送信する必要があります。responseContentには、認可サーバーからの応答内容が含まれています。
認可サーバーはこれでトークンを正常に作成し、クライアントに提供しました。Authlete API を利用することで、認可サーバーは認可およびトークンリクエストのパラメータを評価するための複雑なロジックを実装する必要がなくなり、適切な方法で応答することができます。
API リクエスト(アクセストークンのイントロスペクション)
通常、クライアントはアクセストークンを使用してリソースサーバーにリクエストを送信し、API にアクセスします(ステップ 18)。リソースサーバーは、トークンの有効性を評価し、トークンに関連付けられたユーザーおよびクライアントに関する情報を取得し、API リクエストへの応答方法を決定します。 Authlete は、この目的のために/auth/introspection API を提供しています。この API はトークンの有効性を検証し、必要な情報を提供します。
ここでは、リソースサーバーがクライアントから受け取ったアクセストークンを以下の入力欄に設定し、curl でイントロスペクトします。
| アクセストークン (access_token) |
bash
powershell
json
- トークンの有効期限(
expiresAt) - アクセスを承認したユーザーの識別子(
subject) - トークンを取得するために使用されたグラントタイプ(
grantType) - クライアント識別子(
clientId)