トークンの失効
IBM® API Connectでは、トークンを取り消したり、リフレッシュしたりすることができます。 必要な場合は、特定のクライアント ID またはリソース所有者に対して発行されたトークンをすべて失効させることもできます。
外部のサード・パーティー・サービスを使用したトークンの失効
このトピックでは、サード・パーティーの外部サービスを使用したトークンの失効について説明します。 このオプションは、 画面を使用して、ネイティブ OAuth プロバイダーで構成されます。 失効 URL は、アクセス・トークンまたはリフレッシュ・トークンに関する情報を含む外部サービスにリンクするエンドポイントです。 API Connect は、トークンの初期作成および検証に関与します。 OAuthの取り消し通知 URL が存在する場合、 API Connect は URL に電話し、関連付けられたトークンが信頼できるかどうかを判断します。 その後、トークン・サーバーはトークン・ブロックリスト (非アクティブなトークンのデータ・ストア) をチェックして、トークンが引き続き有効であることを確認します。 トークンがまだ有効である場合、 API Connect は処理を続行します。
例
いくつかの失効の例を以下に示します。 最初の例は、フェッチ要求サンプルとリモート失効 URL からの応答を示しています。
GET 要求と応答
以下の例では、API ゲートウェイ・サーバーが失効 URL に GET 要求を発行し、結果を受け取ります。 この例は、別々のリソース所有者 (Laura と Emily) でも、同じアプリケーション (クライアント ID) を使用していれば、すべてのトークンを失効させることができることを示しています。
要求:
<?xml version="1.0" encoding="UTF-8"?>
GET <revocationURL> HTTP/1.1
User-Agent: IBM-APIManagement/4.0
Accept: application/xml; text/xml
回答:
<?xml version="1.0" encoding="UTF-8"?>
<oauth-revocation>
<!--
Access Tokens and/or Refresh Tokens that are revoked can be individually listed.
To keep this list small, please only include access tokens and refresh tokens that are valid.
For access tokens, any token older than 20 minutes is no longer valid.
For refresh tokens, any token older than 44700 minutes is no longer valid.
-->
<token type="access">AAETb2F1dGgtcmV2b2tlLWN1c3RvbfZaRlVbnPSc1...</token>
<token type="refresh">fZaRlVbnPSc1UGTjCRdq4mPbOosD2+aZIKbJ6bTeW...</token>
<!--
If a resource owner has revoked all tokens issued to a given application, please
list them as shown here.
-->
<resource-owner client-id="760d75a2-44b1-4485-8c6f-0d264fcf7398">laura</resource-owner>
<resource-owner client-id="760d75a2-44b1-4485-8c6f-0d264fcf7398">emily</resource-owner>
</oauth-revocation>
POST 要求および応答
次の例は、POST 要求とその応答を示しています。
要求:
POST <revocationURL> HTTP/1.1
User-Agent: IBM-APIManagement/4.0
Content-Type: application/xml
<?xmlversion="1.0" encoding="UTF-8"?>
<token>
<token_type>bearer</token_type>
<access_token>AAENYy1hbGwtcmVmcmVzaOfNeQKX8ZeojsBY9v0FI7/OerQvzKHq...</access_token>
<expires_in>3600</expires_in>
<scope>3600</scope>
<resource-owner>alice</resource-owner>
<client_id>83d9cdcd-ba72-4d00-abae-005da8da5fb1</client_id>
</token>
回答:
HTTP/1.1 200 OK
取り消し要求に対するトークン情報の提供
この例では、アプリケーションは API を呼び出し、ベアラー・トークンを渡します。 それに対する応答として、ゲートウェイは失効 URL をフェッチし、検証されているトークンに関する情報を提供します。
ゲートウェイ:
GET <revocationURL>HTTP/1.1
access-token: AAETb2F1dGgtcmV2b2tlLWN1c3RvbfZaRlVbnPSc1
client-id: 760d75a2-44b1-4485-8c6f-0d264fcf7398
resource-owner: alice
あるいは、リフレッシュ・トークンを使用して新規アクセス・トークンを発行する場合にも、同じプロセスが発生します。 アプリケーションは、トークン・サービスにリフレッシュ要求を送信します。 次にゲートウェイが、失効 URL をフェッチし、検証されているリフレッシュ・トークンに関する情報を提供します。
ゲートウェイ:
GET <revocationURL>GET HTTP/1.1
refresh-token: AAETb2F1dGgtcmV2b2tlLWN1c3RvbfZaRlVbnPSc1
client-id: 760d75a2-44b1-4485-8c6f-0d264fcf7398
resource-owner: alice
200
OK という応答を返す前に、トークンを検証して、失効していないかのチェックも行う必要があります。特定の日付までに Alice に対して発行されたトークンの失効
Alice は 5 月 1 日に自分の電話を紛失し、パスワードの再設定が必要になりました。 その結果、トークン・プロバイダーは、Alice が電話を紛失する前に発行されたすべてのトークンを失効させようとします。 この例では、ゲートウェイは GET 要求を失効サービスに送信します。 失効サービスは、指定されたトークンの失効を確認したことを応答します。
ゲートウェイ:
GET <revocationURL>HTTP/1.1
access-token: AAETb2F1dGgtcmV2b2tlLWN1c3RvbfZaRlVbnPSc1
client-id: 760d75a2-44b1-4485-8c6f-0d264fcf7398
resource-owner: alice
失効サービス:
<?xml version="1.0" encoding="UTF-8"?>
<oauth-revocation>
<resource-owner before="2015-05-01T09:30:10Z">alice</resource-owner>
<oauth-revocation>
特定の日付までに発行されたすべてのトークンの失効
特定の壊滅的な条件の下では、特定の日付 (例えば 5 月 1 日) までに発行されたすべてのトークンを失効させることが必要となる場合があります。 この例では、ゲートウェイは GET 要求を失効サービスに送信します。 失効サービスは、指定されたトークンの失効を確認したことを応答します。
ゲートウェイ:
GET <revocationURL>HTTP/1.1
access-token: AAETb2F1dGgtcmV2b2tlLWN1c3RvbfZaRlVbnPSc1
client-id: 760d75a2-44b1-4485-8c6f-0d264fcf7398
resource-owner: alice
失効サービス:
<?xml version="1.0" encoding="UTF-8"?>
<oauth-revocation>
<everytoken before="2015-05-01T09:30:10Z" />
<oauth-revocation>
指定全体の結果
このトピックに含まれる例を単一のアクションで実行する例を以下に示します。
ゲートウェイ:
GET <revocationURL>HTTP/1.1
access-token: AAETb2F1dGgtcmV2b2tlLWN1c3RvbfZaRlVbnPSc1
client-id: 760d75a2-44b1-4485-8c6f-0d264fcf7398
resource-owner: alice
失効サービス:
HTTP/1.1 200 OK
Content-Type: application/xml
Cache-Control: public, max-age=120
Date: Fri, 08 May 2015 21:49:03 GMT
<?xml version-"1.0" encoding="UTF-8"?>
<oauth-revocation>
<resource-owner before="2015-04-08T09:30:10Z">mary</resource-owner>
<resource-owner before="2015-04-12T09:30:10Z">john</resource-owner>
<resource-owner before="2015-04-13T09:30:10Z">kevin</resource-owner>
<resource-owner before="2015-04-01T09:30:10Z">alice</resource-owner>
<oauth-revocation>
- 上記の例では、応答に 1 カ月 (リフレッシュ・トークンの最大存続時間) よりも古い項目はありません。
- 各応答は、応答のディレクティブに従って、最大 2 分間までキャッシュに入れられます。
before属性では、xs:dateTime構文が使用されます。