4.2. トークンの追加
OAuth Applications の詳細ページで Tokens タブを選択すると、アプリケーションにアクセスするためのトークンを持つユーザーのリストを表示できます。
作成できるのは、自分のユーザー用の OAuth 2 トークンだけです。つまり、トークンを設定または表示するには、自分のユーザープロファイルから行う必要があります。
認証トークンが設定されている場合、トークンを関連付けるアプリケーションとトークンのアクセスレベルを選択できます。
手順
-
ナビゲーションパネルから、
を選択します。 - OAuth 2 トークンを設定するユーザープロファイルのユーザー名を選択します。
Tokens タブを選択します。
トークンがない場合は、Tokens 画面でトークンを追加するように求められます。
- Token ウィンドウを開きます。 をクリックして、
以下の詳細を入力します。
- アプリケーション
トークンを関連付けるアプリケーションの名前を入力します。または、Name を選択して名前でフィルタリングします。
をクリックして検索することもできます。これにより、別のウィンドウが開き、利用可能なオプションから選択できるようになります。リストが大きい場合は、フィルターリストから注記どのアプリケーションにもリンクされていない Personal Access Token (PAT) を作成するには、Application フィールドを空白のままにします。
- Description
- (任意) トークンの簡単な説明を入力します。
- Scope
(必須) このトークンに付与するアクセスレベルを指定します。OAuth 2 トークンのスコープは、次のいずれかに設定できます。
- Write: このトークンを使用して送信された要求に、システム内のリソースを追加、編集、削除することを許可します。
- Read: アクションを読み取り専用に制限します。Read スコープは Write スコープに包含されることに注意してください。
Token 情報に、Token と Refresh Token の情報、およびトークンの有効期限が表示されます。トークンとリフレッシュトークンが表示されるのはこのときだけです。リストビューから、トークンの関連付けとトークン情報を表示できます。
- コピーアイコンをクリックし、トークンとリフレッシュトークンを後で使用するために保存します。
検証
アプリケーションの詳細ページの Tokens タブを使用して、アプリケーションに適切なトークンを持つユーザーが表示されることを確認できます。
-
ナビゲーションパネルから、
を選択します。 - Applications リストビューから検証するアプリケーションを選択します。
Tokens タブを選択します。
選択したアプリケーションに関連付けられたトークンのリストにトークンが表示されます。
関連情報
システム管理者であり、他のユーザーのトークンを作成または削除する必要がある場合は、トークンとセッションの管理 の revoke コマンドと create コマンドを参照してください。
4.2.1. アプリケーショントークンの機能
/o/
エンドポイントのトークンに関連付けられた refresh
機能および revoke
機能を実行するには、現在、アプリケーショントークンが必要です。
4.2.1.1. 既存のアクセストークンの更新
次の例は、リフレッシュトークンが指定された既存のアクセストークンを示しています。
{ "id": 35, "type": "access_token", ... "user": 1, "token": "omMFLk7UKpB36WN2Qma9H3gbwEBSOc", "refresh_token": "AL0NK9TTpv0qp54dGbC4VUZtsZ9r8z", "application": 6, "expires": "2017-12-06T03:46:17.087022Z", "scope": "read write" }
{
"id": 35,
"type": "access_token",
...
"user": 1,
"token": "omMFLk7UKpB36WN2Qma9H3gbwEBSOc",
"refresh_token": "AL0NK9TTpv0qp54dGbC4VUZtsZ9r8z",
"application": 6,
"expires": "2017-12-06T03:46:17.087022Z",
"scope": "read write"
}
/o/token/
エンドポイントは、アクセストークンを更新するために使用されます。
curl -X POST \ -d "grant_type=refresh_token&refresh_token=AL0NK9TTpv0qp54dGbC4VUZtsZ9r8z" \ -u "gwSPoasWSdNkMDtBN3Hu2WYQpPWCO9SwUEsKK22l:fI6ZpfocHYBGfm1tP92r0yIgCyfRdDQt0Tos9L8a4fNsJjQQMwp9569eIaUBsaVDgt2eiwOGe0bg5m5vCSstClZmtdy359RVx2rQK5YlIWyPlrolpt2LEpVeKXWaiybo" \ http://<gateway>/o/token/ -i
curl -X POST \
-d "grant_type=refresh_token&refresh_token=AL0NK9TTpv0qp54dGbC4VUZtsZ9r8z" \
-u "gwSPoasWSdNkMDtBN3Hu2WYQpPWCO9SwUEsKK22l:fI6ZpfocHYBGfm1tP92r0yIgCyfRdDQt0Tos9L8a4fNsJjQQMwp9569eIaUBsaVDgt2eiwOGe0bg5m5vCSstClZmtdy359RVx2rQK5YlIWyPlrolpt2LEpVeKXWaiybo" \
http://<gateway>/o/token/ -i
ここで、refresh_token
は、前述のアクセストークンの refresh_token
フィールドで指定されます。
認証情報の形式は、<client_id>:<client_secret>
です。client_id
と client_secret
は、アクセストークンの基盤となる関連アプリケーションの対応するフィールドに置き換えます。
特別な OAuth 2 エンドポイントは、x-www-form-urlencoded
という Content-type の使用のみをサポートしています。そのため、application/json
を受け入れる /o/*
エンドポイントはありません。
成功すると、以前のものと同じスコープ情報を持つ新しい (更新された) アクセストークンを含む応答が、JSON 形式で表示されます。
HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Tue, 05 Dec 2017 17:54:06 GMT Content-Type: application/json Content-Length: 169 Connection: keep-alive Content-Language: en Vary: Accept-Language, Cookie Pragma: no-cache Cache-Control: no-store Strict-Transport-Security: max-age=15768000 {"access_token": "NDInWxGJI4iZgqpsreujjbvzCfJqgR", "token_type": "Bearer", "expires_in": 315360000000, "refresh_token": "DqOrmz8bx3srlHkZNKmDpqA86bnQkT", "scope": "read write"}
HTTP/1.1 200 OK
Server: nginx/1.12.2
Date: Tue, 05 Dec 2017 17:54:06 GMT
Content-Type: application/json
Content-Length: 169
Connection: keep-alive
Content-Language: en
Vary: Accept-Language, Cookie
Pragma: no-cache
Cache-Control: no-store
Strict-Transport-Security: max-age=15768000
{"access_token": "NDInWxGJI4iZgqpsreujjbvzCfJqgR", "token_type": "Bearer", "expires_in": 315360000000, "refresh_token": "DqOrmz8bx3srlHkZNKmDpqA86bnQkT", "scope": "read write"}
更新操作では、元のトークンを削除した直後に、元のトークンと同じスコープと関連アプリケーションを持つ新しいトークンを作成することで、既存のトークンを置き換えます。
api/gateway/v1/tokens/
エンドポイントで新しいトークンが存在し、古いトークンが削除されていることを確認します。
4.2.1.2. アクセストークンの取り消し
アクセストークンを取り消すには、プラットフォームの UI でトークンを削除するか、/o/revoke-token/
エンドポイントを使用します。
この方法によるアクセストークンの取り消しは、トークンリソースオブジェクトの削除と同じです。ただしこの方法では、トークン値と、関連付けられた client_id
(アプリケーションが confidential
の場合は加えて client_secret
) を指定することで、トークンを削除できます。以下に例を示します。
curl -X POST -d "token=rQONsve372fQwuc2pn76k3IHDCYpi7" \ -u "gwSPoasWSdNkMDtBN3Hu2WYQpPWCO9SwUEsKK22l:fI6ZpfocHYBGfm1tP92r0yIgCyfRdDQt0Tos9L8a4fNsJjQQMwp9569eIaUBsaVDgt2eiwOGe0bg5m5vCSstClZmtdy359RVx2rQK5YlIWyPlrolpt2LEpVeKXWaiybo" \ http://<gateway>/o/revoke_token/ -i
curl -X POST -d "token=rQONsve372fQwuc2pn76k3IHDCYpi7" \
-u "gwSPoasWSdNkMDtBN3Hu2WYQpPWCO9SwUEsKK22l:fI6ZpfocHYBGfm1tP92r0yIgCyfRdDQt0Tos9L8a4fNsJjQQMwp9569eIaUBsaVDgt2eiwOGe0bg5m5vCSstClZmtdy359RVx2rQK5YlIWyPlrolpt2LEpVeKXWaiybo" \
http://<gateway>/o/revoke_token/ -i
-
特別な OAuth 2 エンドポイントは、
x-www-form-urlencoded
という Content-type の使用のみをサポートしています。そのため、application/json
を受け入れる/o/*
エンドポイントはありません。 -
Allow External Users to Create Oauth2 Tokens (API の
ALLOW_OAUTH2_FOR_EXTERNAL_USERS
) の設定は、デフォルトでは無効になっています。外部ユーザーとは、LDAP などのサービスやその他の SSO サービスにより、外部で認証されたユーザーを指します。この設定により、外部ユーザーは独自のトークンを作成できなくなります。有効にしてから無効にすると、その間に外部ユーザーが作成したトークンは残り、自動的には取り消されません。この設定は、メニューから設定できます。
あるいは、OAuth2 トークンを取り消すために、manage
ユーティリティーを使用できます。oauth2 トークンの取り消し を参照してください。
成功すると、200 OK
という応答が表示されます。トークンが api/gateway/v1/tokens/
エンドポイントに存在するかどうかを確認して、削除されていることを確認します。
4.2.2. トークンとセッションの管理
Ansible Automation Platform は、OAuth2 トークン管理用の次のコマンドをサポートしています。
4.2.2.1. create_oauth2_token
次のコマンドを使用して OAuth2 トークンを作成します (example_user
にはユーザー名を指定します)。
aap-gateway-manage create_oauth2_token --user example_user
$ aap-gateway-manage create_oauth2_token --user example_user
New OAuth2 token for example_user: j89ia8OO79te6IAZ97L7E8bMgXCON2
トークンを作成するときは、必ず有効なユーザーを指定してください。そうしなければ、ユーザーを指定せずにコマンドを発行しようとしたことを示すエラーメッセージか、存在しないユーザー名を指定したことを示すエラーメッセージが表示されます。
4.2.2.2. revoke_oauth2_tokens
このコマンドは、OAuth2 トークン (アプリケーショントークンと Personal Access Token (PAT) の両方) を取り消すために使用します。すべてのアプリケーショントークン (関連付けられているリフレッシュトークンは除く) を取り消し、すべての Personal Access Token を取り消します。ただし、すべてのトークンを取り消すユーザーを指定することもできます。
既存の OAuth2 トークンをすべて取り消すには、次のコマンドを使用します。
aap-gateway-manage revoke_oauth2_tokens
$ aap-gateway-manage revoke_oauth2_tokens
すべての OAuth2 トークンとそのリフレッシュトークンを取り消すには、次のコマンドを使用します。
aap-gateway-manage revoke_oauth2_tokens --revoke_refresh
$ aap-gateway-manage revoke_oauth2_tokens --revoke_refresh
id=example_user
が指定されたユーザーの OAuth2 トークンをすべて取り消すには、以下を実行します (example_user
にユーザー名を指定します)。
aap-gateway-manage revoke_oauth2_tokens --user example_user
$ aap-gateway-manage revoke_oauth2_tokens --user example_user
id=example_user
のユーザーのすべての OAuth2 トークンとリフレッシュトークンを取り消すには、次のコマンドを実行します。
aap-gateway-manage revoke_oauth2_tokens --user example_user --revoke_refresh
$ aap-gateway-manage revoke_oauth2_tokens --user example_user --revoke_refresh
4.2.2.3. cleartokens
このコマンドを使用して、すでに取り消されたトークンを消去します。
詳細は、Django の Oauth Toolkit ドキュメントの cleartokens を参照してください。
4.2.2.4. clearsessions
このコマンドを使用して、期限切れになったすべてのセッションを削除します。
詳細は、Django の Oauth Toolkit ドキュメントの Clearing the session store を参照してください。
UI での OAuth2 トークン管理の詳細は、アプリケーション を参照してください。