このページは Apigee と Apigee ハイブリッドに適用されます。
Apigee Edge のドキュメントを表示する。
このドキュメントでは、Apigee API を使用して OAuth 2.0 アクセス トークンと認証コードを取得する方法について説明します。また、OAuth 2.0 付与タイプごとにポリシーを作成し、クライアント リクエストを受け入れるようにプロキシ エンドポイントを構成する方法についても説明します。
認証コード権限付与タイプを使用する
このセクションでは、認証コード権限付与タイプフローを使用してアクセス トークンを取得する方法について説明します。このフローのトークン リクエストには認証コードが必要です。認証コードを取得するをご覧ください。OAuth 2.0 の権限付与タイプとはもご覧ください。
リクエストの例
curl -i -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \ -X POST 'https://apitest.acme.com/oauth/token' \ -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'
必須パラメータ
デフォルトでは、これらのパラメータを x-www-form-urlencoded
とし、リクエスト本文で指定する必要があります(上記のサンプルを参照)。ただし、OAuthV2 ポリシーで <GrantType>
要素、<Code>
要素、<RedirectUri>
要素を構成することで、このデフォルトを変更できます。OAuthV2 ポリシーをご覧ください。
- grant_type - 値を
authorization_code
に設定する必要があります。 - code - 認証コード。認証コードのリクエストをご覧ください。
- redirect_uri - 認証コード リクエストに
redirect_uri
パラメータが含まれている場合は、このパラメータを指定する必要があります。redirect_uri
パラメータが認証コード リクエストに含まれていなかった場合で、このパラメータを指定しない場合、このポリシーは登録済みのデベロッパー アプリで指定されるコールバック URL の値を使用します。
オプション パラメータ
- state - レスポンスとともに返される文字列。通常、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用されます。
- scope - 作成されたトークンを使用できる API プロダクトのリストをフィルタリングできます。スコープの詳細については、OAuth2 スコープの操作をご覧ください。
承認
クライアント ID とクライアント シークレットを Basic 認証ヘッダー(Base64 でエンコードされたもの)、またはフォーム パラメータ client_id
と client_secret
として渡す必要があります。これらの値は、登録済みのデベロッパー アプリから取得します。Basic 認証の認証情報をエンコードするもご覧ください。
サンプル エンドポイント
ここでは、アクセス トークンを生成するためのエンドポイント構成のサンプルを示します。これにより実行される GenerateAccessToken ポリシーは、authorization_code 権限付与タイプをサポートするよう構成する必要があります。
... <Flow name="generate-access-token"> <Description>Generate a token</Description> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
サンプル ポリシー
これは、authorization_code
権限付与タイプを受け入れるように構成された基本的な GenerateAccessToken ポリシーです。このポリシーを使用して構成できる任意の構成要素については、OAuthV2 ポリシーをご覧ください。
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn> <SupportedGrantTypes> <GrantType>authorization_code</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
戻り値
<GenerateResponse>
を有効にすると、ポリシーは、以下のとおりアクセス トークンを含む JSON レスポンスを返します。authorization_code
権限付与タイプでは、アクセス トークンとリフレッシュ トークンが作成されるため、レスポンスは次のようになります。
{ "issued_at": "1420262924658", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420262924658", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi", "organization_name": "docs", "refresh_token_expires_in": "86399", //--in seconds "refresh_count": "0" }
<GenerateResponse>
が false に設定されている場合、このポリシーはレスポンスを返しません。代わりに、以下のフロー変数のセットにアクセス トークン付与に関するデータを入力します。
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
次に例を示します。
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
クライアント認証情報の権限付与タイプを使用する
このセクションでは、クライアント認証情報権限付与タイプフローを使用してアクセス トークンを取得する方法について説明します。OAuth 2.0 の権限付与タイプとはもご覧ください。
リクエストの例
curl -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=client_credentials"
必須パラメータ
- grant_type - 値を
client_credentials
に設定する必要があります。デフォルトでは、必須の
grant_type
パラメータはx-www-form-urlencoded
であり、リクエストの本文(上の例で示す)で指定することが必要です。ただし、OAuthV2 ポリシーで<GrantType>
要素を構成することにより、このデフォルトを変更できます。たとえば、パラメータをクエリ パラメータで渡すことが可能です。詳しくは、OAuthV2 ポリシーをご覧ください。
オプション パラメータ
- state - レスポンスとともに返される文字列。通常、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用されます。
- scope - 作成されたトークンを使用できる API プロダクトのリストをフィルタリングできます。スコープの詳細については、OAuth2 スコープの操作をご覧ください。
承認
クライアント ID とクライアント シークレットを Basic 認証ヘッダー(Base64 でエンコードされたもの)、またはフォーム パラメータ client_id
と client_secret
として渡す必要があります。これらの値は、リクエストに関連付けられた、登録済みのデベロッパー アプリから取得します。基本認証用の認証情報のエンコードもご覧ください。
サンプル エンドポイント
ここでは、アクセス トークンを生成するためのエンドポイント構成のサンプルを示します。これにより GenerateAccessToken ポリシーが実行されます。このポリシーは、client_credentials 付与タイプをサポートするように構成する必要があります。
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
サンプル ポリシー
これは、client_credentials
権限付与タイプを受け入れるように構成された基本的な GenerateAccessToken ポリシーです。このポリシーを使用して構成できる任意の構成要素については、OAuthV2 ポリシーをご覧ください。
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
戻り値
<GenerateResponse>
が有効な場合、このポリシーは JSON レスポンスを返します。なお、権限付与タイプが client_credentials
の場合、リフレッシュ トークンはサポートされません。アクセス トークンだけが作成されます。次に例を示します。
{ "issued_at": "1420260525643", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav", "organization_name": "docs" }
<GenerateResponse>
が false に設定されている場合、このポリシーはレスポンスを返しません。代わりに、以下のフロー変数のセットにアクセス トークン付与に関するデータを入力します。
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
次に例を示します。
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
パスワード権限付与タイプを使用する
このセクションでは、リソース所有者パスワード認証情報(password)権限付与タイプフローを使用して、アクセス トークンを取得する方法について説明します。パスワード権限付与タイプを実装するもご覧ください。OAuth 2.0 の権限付与タイプとはもご覧ください。
リクエストの例
curl -v -k -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=password&username=a_username&password=a_password"
必須パラメータ
デフォルトでは、これらのパラメータを x-www-form-urlencoded
とし、リクエスト本文で指定する必要があります(上記のサンプルを参照)。ただし、OAuthV2 ポリシーで <GrantType>
要素、<Username>
要素、<Password>
要素を構成することで、このデフォルトを変更できます。OAuthV2 ポリシーをご覧ください。
ユーザー認証情報は、通常は LDAP または JavaScript ポリシーを使用して格納された認証情報に照らして検証されます。
- grant_type - 値を
password
に設定する必要があります。 - username - リソース所有者のユーザー名。
- password - リソース所有者のパスワード。
オプション パラメータ
- state - レスポンスとともに返される文字列。通常、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用されます。
- scope - 作成されたトークンを使用できる API プロダクトのリストをフィルタリングできます。スコープの詳細については、OAuth2 スコープの操作をご覧ください。
承認
クライアント ID とクライアント シークレットを Basic 認証ヘッダー(Base64 でエンコードされたもの)、またはフォーム パラメータ client_id
と client_secret
として渡す必要があります。これらの値は、リクエストに関連付けられた、登録済みのデベロッパー アプリから取得します。基本認証用の認証情報のエンコードもご覧ください。
サンプル エンドポイント
ここでは、アクセス トークンを生成するためのエンドポイント構成のサンプルを示します。これにより実行される GenerateAccessToken ポリシーは、パスワード権限付与タイプをサポートするよう構成されている必要があります。
... <Flow name="generate-access-token"> <Request> <Step> <Name>GenerateAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition> </Flow> ...
サンプル ポリシー
これは、パスワード権限付与タイプを受け入れるように構成された基本的な GenerateAccessToken ポリシーです。このポリシーを使用して構成できる任意の構成要素については、OAuthV2 ポリシーをご覧ください。
<OAuthV2 name="GenerateAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours --> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> </OAuthV2>
戻り値
<GenerateResponse>
が有効な場合、このポリシーは JSON レスポンスを返します。パスワード権限付与タイプを使用すると、アクセス トークンとリフレッシュ トークンの両方が作成されます。次に例を示します。
{ "issued_at": "1420258685042", "scope": "READ", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "refresh_token_issued_at": "1420258685042", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "organization_id": "0", "token_type": "BearerToken", "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "0" }
<GenerateResponse>
が false に設定されている場合、このポリシーはレスポンスを返しません。代わりに、以下のフロー変数のセットにアクセス トークン付与に関するデータを入力します。
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
次に例を示します。
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at oauthv2accesstoken.GenerateAccessToken.refresh_token_status
暗黙的権限付与タイプを使用する
このセクションでは、暗黙的権限付与タイプフローを使用してアクセス トークンを取得する方法について説明します。OAuth 2.0 の権限付与タイプとはもご覧ください。
リクエストの例
$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \ 'https://apitest.acme.com/oauth/implicit?response_type=token&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://callback-example.com'
必須パラメータ
デフォルトでは、これらのパラメータをクエリ パラメータとする必要があります(上記のサンプルを参照)。ただし、この /token
エンドポイントに接続された OAuthV2 ポリシーで <ResponseType>
要素、<ClientId>
要素、<RedirectUri>
要素を構成することで、このデフォルトを変更できます。詳しくは、OAuthV2 ポリシーをご覧ください。
ユーザー認証情報は、通常は LDAP サービス コールアウトまたは JavaScript ポリシーを使用して格納された認証情報に照らして検証されます。
- response_type - 値を
token
に設定する必要があります。 - client_id - 登録されたデベロッパー アプリのクライアント ID。
- redirect_uri - クライアントのデベロッパー アプリが登録されたときにコールバック URI が提供されなかった場合は、このパラメータを必ず指定してください。コールバック URL がクライアント登録時に指定された場合は、この値と比較して完全一致しなければなりません。
オプション パラメータ
- state - レスポンスとともに返される文字列。通常、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用されます。
- scope - 作成されたトークンを使用できる API プロダクトのリストをフィルタリングできます。スコープの詳細については、OAuth2 スコープの操作をご覧ください。
承認
認証ヘッダーは必要ありませんが、リクエスト パラメータとしてクライアント ID を渡す必要があります。
サンプル エンドポイント
ここでは、アクセス トークンを生成するためのエンドポイント構成のサンプルを示します。これにより GenerateAccessTokenImplicitGrant ポリシーが実行されます。
... <Flow name="generate-access-token-implicit"> <Request> <Step> <Name>GenerateAccessTokenImplicitGrant</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition> </Flow> ...
サンプル ポリシー
これは、暗黙的権限付与タイプフローでトークン リクエストを処理する基本的な GenerateAccessTokenImplicitGrant ポリシーです。このポリシーを使用して構成できる任意の構成要素については、OAuthV2 ポリシーをご覧ください。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="GenerateAccessTokenImplicit"> <DisplayName>GenerateAccessTokenImplicit</DisplayName> <Operation>GenerateAccessTokenImplicitGrant</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
戻り値
<GenerateResponse>
が有効な場合、ポリシーはレスポンス ヘッダーで 302 ロケーション リダイレクトを返します。このリダイレクトは、redirect_uri
パラメータで指定された URL を指し、アクセス トークンとトークンの有効期限が付加されます。暗黙的付与タイプはリフレッシュ トークンをサポートしないことにご留意ください。次に例を示します。
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
<GenerateResponse>
が false に設定されている場合、このポリシーはレスポンスを返しません。代わりに、以下のフロー変数のセットにアクセス トークン付与に関するデータを入力します。
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds
次に例を示します。
oauthv2accesstoken.GenerateAccessToken.access_token oauthv2accesstoken.GenerateAccessToken.expires_in //--in seconds
認証コードを取得する
認証コード権限付与タイプフローでは、アクセス トークンを取得するために認証コードが必要です。認証コード権限付与タイプを使用するをご覧ください。OAuth 2.0 の権限付与タイプとはもご覧ください。
リクエストの例
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \ "https://apitest.acme.com/oauth/authorize?response_type=code&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://my-callback.com"
必須パラメータ
デフォルトでは、これらのパラメータはクエリ パラメータであることが必要です(上のサンプルを参照)。ただし、OAuthV2 ポリシーに <ResponseType>
要素、<ClientId>
要素、<RedirectUri>
要素を構成することで、このデフォルトを変更できます。詳しくは、OAuthV2 ポリシーをご覧ください。
- redirect_uri - コールバック URI 全体(一部ではなく)が登録済みのクライアント アプリで指定されている場合、このパラメータは任意です。コールバック URI 全体が指定されていない場合は必須です。コールバックは、作成した認証コードを Apigee が送信する URL です。アプリの登録と API キーの管理をご覧ください。
- response_type - 値を
code
に設定する必要があります。 - client_id - 登録されたデベロッパー アプリのクライアント ID。
オプション パラメータ
- redirect_uri - コールバック URI 全体(一部ではなく)が登録済みのクライアント アプリで指定されている場合、このパラメータは任意です。コールバック URI 全体が指定されていない場合は必須です。コールバックは、作成した認証コードを Apigee が送信する URL です。アプリの登録と API キーの管理をご覧ください。
- state - レスポンスとともに返される文字列。通常、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用されます。
- scope - 作成されたトークンを使用できる API プロダクトのリストをフィルタリングできます。スコープの詳細については、OAuth2 スコープの操作をご覧ください。
承認
認証ヘッダーは必要ありませんが、登録されたクライアント アプリのクライアント ID をリクエストで入力する必要があります。
サンプル ポリシー
これは、基本的な GenerateAuthorizationCode ポリシーです。その他の構成オプションについては、OAuthV2 ポリシーをご覧ください。
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
戻り値
<GenerateResponse>
が有効な場合、このポリシーは認証コードが添付された redirect_uri
(コールバック URI)のロケーションに ?code
クエリ パラメータを返します。302 ブラウザ リダイレクトを介して、レスポンスの Location ヘッダーの URL とともに送信されます。例: ?code=123456
。
<GenerateResponse>
が false
に設定されている場合、このポリシーはレスポンスを返しません。代わりに、以下のフロー変数のセットに認証コードに関するデータを入力します。
oauthv2authcode.{policy-name}.code oauthv2authcode.{policy-name}.scope oauthv2authcode.{policy-name}.redirect_uri oauthv2authcode.{policy-name}.client_id
次に例を示します。
oauthv2authcode.GenerateAuthorizationCode.code oauthv2authcode.GenerateAuthorizationCode.scope oauthv2authcode.GenerateAuthorizationCode.redirect_uri oauthv2authcode.GenerateAuthorizationCode.client_id
アクセス トークンをリフレッシュする
リフレッシュ トークンとは、一般にアクセス トークンの有効期限が切れたり無効になったりした後で、アクセス トークンを取得するために使用する認証情報です。アクセス トークンを受け取ったときレスポンスでリフレッシュ トークンが返されます。
リクエストの例
次の呼び出しで Basic 認証ヘッダーをエンコードする方法については、Basic 認証の認証情報をエンコードするをご覧ください。
$ curl -X POST \ -H "Content-type: application/x-www-form-urlencoded" \ -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \ https://apitest.acme.com/oauth/refresh \ -d "grant_type=refresh_token&refresh_token=yVSL38WpuN3Kzn1UTMoE6AQ4ANZM"
必須パラメータ
デフォルトでは、上記の例で示すように、ポリシーはリクエスト本文で指定された x-www-form-urlencoded
パラメータとしてこれらを検索します。これらの入力用の別のロケーションを構成するには、OAuthV2 ポリシーで <GrantType>
要素と <RefreshToken>
要素を使用します。詳しくは、OAuthV2 ポリシーをご覧ください。
- grant_type - 値を
refresh_token
に設定する必要があります。 - refresh_token - 更新するアクセス トークンに関連付けられたリフレッシュ トークン。
オプション パラメータ
- state - レスポンスとともに返される文字列。通常、クロスサイト リクエスト フォージェリ攻撃を防ぐために使用されます。
- scope - 作成されたトークンを使用できる API プロダクトのリストをフィルタリングできます。スコープの詳細については、OAuth2 スコープの操作をご覧ください。
承認
認証ヘッダーは必要ありませんが、登録されたクライアント アプリのクライアント ID をリクエストで入力する必要があります。
アクセス トークンを更新するとき、ユーザーの再認証はありません。
ここでは、リフレッシュ トークンを使用してアクセス トークンを生成するためのエンドポイント構成のサンプルを示します。これにより RefreshAccessToken ポリシーが実行されます。
... <Flow name="generate-refresh-token"> <Request> <Step> <Name>RefreshAccessToken</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition> </Flow> ...
サンプル ポリシー
これは、refresh_token
権限付与タイプを受け入れるように構成された基本的な RefreshAccessToken ポリシーです。このポリシーを使用して構成できる任意の構成要素については、OAuthV2 ポリシーをご覧ください。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <OAuthV2 name="RefreshAccessToken"> <Operation>RefreshAccessToken</Operation> <GenerateResponse enabled="true"/> <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes --> <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours --> </OAuthV2>
戻り値
<GenerateResponse>
を有効にすると、ポリシーは新しいアクセス トークンを含む JSON レスポンスを返します。refresh_token
権限付与タイプでは、アクセス トークンと新しいリフレッシュ トークンの両方を作成できます。次に例を示します。
{ "issued_at": "1420301470489", "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b", "scope": "READ", "refresh_token_issued_at": "1420301470489", "status": "approved", "refresh_token_status": "approved", "api_product_list": "[PremiumWeatherAPI]", "expires_in": "1799", //--in seconds "developer.email": "tesla@weathersample.com", "token_type": "BearerToken", "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5", "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT", "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw", "organization_name": "docs", "refresh_token_expires_in": "28799", //--in seconds "refresh_count": "2" }
新しいリフレッシュ トークンが作成されると、元のトークンは有効でなくなります。
上記のレスポンスは、<GenerateResponse>
が true に設定されている場合に返されます。<GenerateResponse>
が false に設定されている場合、ポリシーはレスポンスを返しません。代わりに、以下のコンテキスト(フロー)変数のセットに、アクセス トークン付与に関するデータを入力します。
oauthv2accesstoken.{policy-name}.access_token oauthv2accesstoken.{policy-name}.expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds oauthv2accesstoken.{policy-name}.refresh_token_issued_at oauthv2accesstoken.{policy-name}.refresh_token_status
次に例を示します。
oauthv2accesstoken.RefreshAccessToken.access_token oauthv2accesstoken.RefreshAccessToken.expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at oauthv2accesstoken.RefreshAccessToken.refresh_token_status
Basic 認証情報をエンコードする
トークンまたは認証コードをリクエストするための API 呼び出しを行う場合、OAuth 2.0 仕様では、client_id と client_secret の値を HTTP-Basic 認証ヘッダーとして渡すことをおすすめします(IETF RFC 2617 を参照)。これを行うには、2 つの値を結合してコロンで区切った結果を Base64 エンコードする必要があります。
擬似コードでは次のようになります。
result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))
ns4fQc14Zg4hKFCNaSzArVuwszX95X
は client_id、ZIjFyTsNgQNyxI
はクライアント シークレットです。
例
次のサンプル コマンドは、Linux と MacOS で機能します。
export CREDENTIALS=$(echo -n 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' | base64)
次に、トークン リクエストを以下のように行います。
$ curl -i -H "Content-Type: application/x-www-form-urlencoded" \ -H "Authorization: Basic $CREDENTIALS" \ -X POST "https://apitest.acme.com/oauth/token" \ -d "grant_type=client_credentials"
データベース内でトークンをハッシュする
Apigee は、データベースのセキュリティ侵害が発生した場合に、すべての OAuth アクセス トークンとリフレッシュ トークンをハッシュして保護します。API 呼び出しでハッシュなしのトークンを使用すると、Apigee はデータベース内のハッシュされたバージョンに対してトークンを検証します。
関連トピック
- クライアント認証情報の権限付与タイプを実装する
- 認証コード権限付与タイプを実装する
- API セキュリティ オンライン コース(OAuth を含む)
- OAuthV2 ポリシー - 認可サーバーにリクエストを行う方法や OAuthV2 ポリシーを構成する方法について多数の例を紹介しています。