スコープ
アクセス・トークンでは、スコープ・パラメータを使用して、異なるレベルのアクセス権を複数のIAMアイデンティティ・ドメインAPIに付与できます。
ススコープによって、アクセス・トークンで許可される一連のリソースおよび操作をより具体的に定義できます。ススコープは目的を表します。クライアントがアクセス・トークンをリクエストすると、要求されたスコープによって、アクセス・トークンの提供時にクライアントが使用する機能の種類が示されます。
さらに、アプリケーションのタイプによって異なるアクセス・トークン権限付与が使用されます。トラスト・アプリケーション(バックエンド・サービスなど)は、ユーザーのかわりにアクセス・トークンを直接リクエストできます。通常、Webアプリケーションでは、最初にユーザーのアイデンティティを検証し、必要に応じてユーザーの承諾を得る必要があります。
urn:opc:idm:__myscopes__
スコープは、許可されているすべてのアイデンティティ・ドメイン・スコープを含むアクセス・トークンを取得する必要がある場合に使用します。リクエスト側クライアントおよびクライアントのリクエストで指定されるユーザー(ある場合)に付与されたアイデンティティ・ドメイン・アプリケーション・ロールによって表される権限に基づいて、適用可能なすべてのアイデンティティ・ドメイン・スコープを含むアクセス・トークンが返されます。このスコープは、どのアイデンティティ・ドメイン管理者ロールにも直接は付与されません。
urn:opc:idm:role.<r_name>
スコープ(たとえば、urn:opc:idm:role.User%20Administrator)
は、クライアントとユーザーの両方に特定のロールが付与されている特定のロールの適用可能なスコープを含むアクセス・トークンを取得する必要がある場合に使用します。たとえば、ユーザー管理者とアプリケーション管理者のロール・ベース・スコープでアクセス・トークンをリクエストするには:
リクエストの例
curl -i
-H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
--request POST https://<domainURL>/oauth2/v1/token
-d 'grant_type=password&username=<user-name>&password=<example-password>&client_id=<client-id>&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<client-assertion>&scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator'
クライアントとユーザーの両方にこれらのロールが付与されているかぎり、生成されたアクセス・トークンにはユーザー管理者とアプリケーション管理者の適用可能なスコープが含まれます。たとえば、クライアントはRole1、Role2およびRole3を持っています。ユーザーはRole1、Role2およびRole 4を持っています。アクセス・トークンのリクエストに含まれるスコープは、Role1とRole3です。生成されたアクセス・トークンには、Role1のスコープのみが含まれます。
スコープ・クレームには、スペース区切りの複数のスコープを含めることができます。スコープ名にスペースが含まれている場合、サーバーは正しいスコープ境界を決定できません。これは、スコープでロール名が使用されている場合に発生することがあります。リクエストの例では、ロール"user administrator"および"application administrator"にURLエンコードされたスペースがあります: scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator.
ロール名のスペース問題を回避するには、URLエンコーディングを使用してロール名を2回エンコードする必要があります:
Javaコードの例
String scope = "scope=urn:opc:idm:role." + URLEncoder.encode(URLEncoder.encode("User Administrator", "UTF-8"), "UTF-8");
scope = scope + " urn:opc:idm:role." + URLEncoder.encode(URLEncoder.encode("Application Administrator", "UTF-8"), "UTF-8");
アプリケーションにスコープが定義されていない
/oauth2/v1/authorize
エンドポイントへのブラウザベースのログイン・フロー・リクエストで次のスコープを指定できます:scope=openid
: 結果のアクセス・トークンは、最小ユーザー情報を提供する/oauth2/c1/userinfo
とともに使用できます。scope=openid approles groups
: 生成されるアクセス・トークンと/oauth2/v1/userinfo
を使用して、ユーザーのロールおよびグループを取得できます。
トラスト・スコープの使用
信頼スコープは、OAuthクライアントによるリソースへのアクセス方法を定義します。信頼スコープにより、信頼できるクライアント・アプリケーションまたは機密クライアント・アプリケーションが、アイデンティティ・ドメイン内のすべてのリソース(Account
)、定義されたタグに基づいた他のリソース(Tags
)、またはクライアントとサービスの間に明示的な関連付けが存在するサービスのみ(Explicit
)へのアクセス権を付与するアクセス・トークンを取得できます。
trustScope
パラメータを定義するオプションは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションでのみ使用できます。このオプションは、パブリック・クライアント・アプリケーションでは使用できません。The
trustScope
attributes of Account,
Tags
, and Explicit
are named All (for Account
), Tagged (for Tags
), and Specific (for Explicit
) in the identity domain Console.-
リクエストでは
urn:opc:resource:consumer::all
スコープのみを使用します。urn:opc:resource:consumer::all
スコープと別のスコープの両方を同じリクエストに含めようとすると(urn:opc:idm:__myscopes__
など)、無効なスコープ・エラーが返されます。 -
urn:opc:resource:consumer::all
スコープを使用してアクセス・トークンをリクエストすると、アイデンティティ・ドメイン管理APIへのアクセスを提供するアクセス・トークンは返されません。管理APIにアクセスするには、スコープ:urn:opc:idm:__myscopes__
を続行する必要があります。「スコープ」を参照してください。 -
クライアント・アプリケーションによってリクエストされたスコープは常に存在し、クライアントがリソースにアクセスできるように、クライアントの定義済の許可されているスコープと直接または階層的に一致する必要があります。
-
Explicit
のtrustScope
値は、トラステッド・クライアント・アプリケーションと機密クライアント・アプリケーションにデフォルトで割り当てられ、クライアント・アプリケーションは、クライアントとターゲット・サービス間の明示的な関連付けに基づいて、権限を持つアクセス・トークンを取得できます。All
またはTagged
オプションを使用するには、All
またはTags.
のtrustScope
値を使用してクライアント・アプリケーションを更新する必要があります。 urn:opc:resource:consumer::all
スコープを使用したアイデンティティ伝播トークン・リクエストの場合、生成されるアクセス・トークンにはurn:opc:resource:consumer::all
スコープは含まれません。
使用可能な各trustScope
の詳細は、次のとおりです:
Account信頼スコープの使用
Account
信頼スコープを使用すると、トラスト・クライアント・アプリケーションまたは機密クライアント・アプリケーションは、ターゲット・サービスとの明示的なアソシエーションを必要とせずに、同じアイデンティティ・ドメイン内の任意のサービスへのアクセス権を付与するアクセス・トークンを取得できます。
trustScope
パラメータを定義するオプションは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションでのみ使用できます。このオプションは、パブリック・クライアント・アプリケーションでは使用できません。Account
信頼スコープを使用するには:
-
Account
の値を、適切なトラステッド・クライアント・アプリケーションのtrustScope
パラメータに割り当てます。ノート
Account
のtrustScope
属性は、アイデンティティ・ドメイン・コンソールで「すべて」という名前になります。 -
信頼できるクライアントまたは機密クライアントを使用してアクセス・トークンをリクエストし、スコープ
urn:opc:resource:consumer::all.
をリクエストしますレスポンスのアクセス・トークンには、オーディエンスurn:opc:resource:scope:account
およびスコープurn:opc:resource:consumer::all
が含まれます。これにより、ターゲット・サービスとの明示的な関連付けを必要とせずに、同じドメイン内のサービスにアクセスできます。
リクエストされたスコープは、常に存在し、リソースへのクライアント・アクセスを可能にするクライアントの許可された定義済スコープと直接的または階層的に一致している必要があります。
ファイングレイン・スコープの使用
urn:opc:resource:consumer::all
スコープの使用に加えて、次の詳細なスコープも指定できます:urn:opc:resource:consumer:paas::read
urn:opc:resource:consumer:paas:stack::all
urn:opc:resource:consumer:paas:analytics::read
urn:opc:resource:consumer:paas:analytics::read
スコープを使用します。返されたアクセス・トークンで、スコープが許可された定義済スコープと直接一致する場合、オーディエンスはurn:opc:resource:scope:account
で、スコープはurn:opc:resource:consumer:paas:analytics::read.
ですクライアントによって定義された許可されたスコープがurn:opc:resource:consumer:paas::read
の場合、クライアントは、urn:opc:resource:consumer:paas::read
またはurn:opc:resource:consumer:paas:analytics::read.
のいずれかのスコープをリクエストすると、リソース階層にアクセスできますただし、リクエストされたスコープがurn:opc:resource:consumer:paas:analytics::write,
の場合、これはクライアント・アプリケーションによって定義された許可されるスコープの1つではないため、クライアントはリソースへのアクセスを許可されません。
リクエストおよびレスポンスの例
次の例は、クライアント資格証明およびリソース所有者の権限付与フローのリクエストとレスポンスの例を示しています。
クライアント資格証明フロー・リクエストの例
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=urn:opc:resource:consumer::all' -k
レスポンスの例
{
"access_token":"eyJ4NX....Zh3ieBlQ",
"token_type":"Bearer",
"expires_in":3600
}
アクセス・トークンには、オーディエンス
urn:opc:resource:scope:account
およびスコープurn:opc:resource:consumer::all.
が含まれますリソース所有者フロー・リクエストの例
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST https://<domainURL>/oauth2/v1/token'
-d 'grant_type=password&scope=urn:opc:resource:consumer::all&username=admin@example.com&password=PasswordExample1'-k
レスポンスの例
{
"access_token":"eyJ4NX...71aImeBsU",
"token_type":"Bearer",
"expires_in":3600
}
完全修飾スコープを使用したリクエストおよびレスポンスの例
次の例は、完全修飾スコープを使用したリクエストおよびレスポンスの例を示しています。
リクエストの例
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
レスポンスの例
{
"access_token":"eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
リフレッシュ・トークンのリクエストを含むリソース所有者フロー・リクエストの例
アクセス・トークンに加えてリフレッシュ・トークンを生成するには、リクエストでスコープurn:opc:resource:consumer::all offline_access
を使用します。
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST https://<domainURL>/oauth2/v1/token'
-d 'grant_type=password&scope=urn:opc:resource:consumer::all offline_access&username=admin@example.com&password=PasswordExample1'-k
レスポンスの例
{
"access_token":"eyJ4...pNYM0M",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"AQIDBAUi....djF9NCA="
}
Tags信頼スコープの使用
Tags
信頼スコープを使用すると、トラスト・クライアント・アプリケーションまたは機密クライアント・アプリケーションは、定義されたタグに基づいて他のリソースへのアクセス権を付与するアクセス・トークンを取得できます。
trustScope
パラメータを定義するオプションは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションでのみ使用できます。このオプションは、パブリック・クライアント・アプリケーションでは使用できません。Tags
信頼スコープを使用するには:
-
Tags
の値をtrustScope
パラメータに割り当て、クライアント・アプリケーションが他のアプリケーションからタグにアクセスできるようにします。ノート
Tags
のtrustScope
属性は、アイデンティティ・ドメイン・コンソールでタグ付けという名前になります。 -
AllowedTags
パラメータのkey:value
ペアを定義します。ノート
これらのステップでは、適切なリソース・アプリケーションでTags
属性にkey:value
ペアが定義されており、クライアント・アプリケーションのallowedTags
属性のリストの少なくとも1つのkey:value
ペアがリソース・アプリケーションのTags
属性の1つのkey:value
ペアと一致することを前提としています。 -
信頼できるクライアントまたは機密クライアントを使用してアクセス・トークンをリクエストし、スコープ
urn:opc:resource:consumer::all.
をリクエストしますレスポンスのアクセス・トークンには、オーディエンスurn:opc:resource:scope:tag=<base64 encoded JSON>
およびスコープurn:opc:resource:consumer::all
が含まれており、クライアント・アプリケーションで指定された許可されたタグに一致するタグを持つリソース・アプリケーションにアクセスできます。
リクエストされたスコープは、常に存在し、リソースへのクライアント・アクセスを可能にするクライアントの許可された定義済スコープと直接的または階層的に一致している必要があります。
ファイングレイン・スコープの使用
urn:opc:resource:consumer::all
スコープの使用に加えて、次の詳細なスコープも指定できます:urn:opc:resource:consumer:paas::read
urn:opc:resource:consumer:paas:stack::all
urn:opc:resource:consumer:paas:analytics::read
urn:opc:resource:consumer:paas:analytics::read
スコープを使用します。スコープが許可された定義済スコープに直接一致する場合、返されたアクセス・トークンで、オーディエンスはurn:opc:resource:scope:tag=<base64 encoded JSON>
で、スコープはurn:opc:resource:consumer:paas:analytics::read.
ですクライアントによって定義された許可されたスコープがurn:opc:resource:consumer:paas::read
の場合、クライアントは、urn:opc:resource:consumer:paas::read
またはurn:opc:resource:consumer:paas:analytics::read.
のいずれかのスコープをリクエストすると、リソース階層にアクセスできますただし、リクエストされたスコープがurn:opc:resource:consumer:paas:analytics::write,
の場合、これはクライアント・アプリケーションによって定義された許可されるスコープの1つではないため、クライアントはリソースへのアクセスを許可されません。
リクエストおよびレスポンスの例
urn:opc:resource:consumer::all
スコープを使用したクライアント資格証明フローのリクエストとレスポンスの例を示します。
リクエストの例
curl -i
-H 'Authorization: Basic MjA3Mz....zllNjI2'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://tenant101.idcs.internal.oracle.com:8943/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=urn:opc:resource:consumer::all'
レスポンスの例
{
"access_token""eyJ4NX....ZbDtAw",
"token_type":"Bearer", "expires_in":3600
}
アクセス・トークンには、オーディエンス
urn:opc:resource:scope:tag=<base64 encoded JSON>
およびスコープurn:opc:resource:consumer::all.
が含まれますデコードされたオーディエンスの例を次に示します: aud:["urn:opc:resource:scope:tag=eyAidGFncyI6WyB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiZ3JlZW4ifSAsICB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiYmx1ZSJ9IF19"]
次の例は、完全修飾スコープを使用したクライアント資格証明フローのリクエストおよびレスポンスの例を示しています。
リクエストの例
curl -i
-H 'Authorization: Basic MzRjYz....Q3OWVk'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
レスポンスの例
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Explicit信頼スコープの使用
Explicit
信頼スコープは、クライアントとターゲット・サービスの明示的な関連付けが存在するサービスに対してのみ信頼スコープを定義します。
trustScope
パラメータを定義するオプションは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションでのみ使用できます。このオプションは、パブリック・クライアント・アプリケーションでは使用できません。これは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションに割り当てられたデフォルトであるため、Explicit
信頼スコープを使用するために何もする必要はありません。Account
またはTags
オプションを使用するには、Account
またはTags.
のtrustScope
値を使用してクライアント・アプリケーションを更新する必要があります。
Explicit
のtrustScope
属性は、アイデンティティ・ドメインで「特定」という名前になります。「Account信頼スコープの使用」および「Tags信頼スコープの使用」を参照してください。
リクエストおよびレスポンスの例
リクエストおよびレスポンスの例は、完全修飾スコープを使用したクライアント資格証明フローを示しています。
リクエストの例
curl -i
-H 'Authorization: Basic MzRjYz....Q3OWVk'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
レスポンスの例
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
複数のリソースからの明示的な信頼スコープの使用
Explicit
信頼スコープは、クライアントとターゲット・サービスの明示的な関連付けが存在するサービスに対してのみ信頼スコープを定義します。1つの認可リクエストまたはトークン・リクエストで異なるリソースに属する複数のスコープを指定し、各スコープに各リソースのスコープが含まれる複数のアクセス・トークンと引き換えに取得できます。
- 認可リクエストまたはトークン・リクエストで、新しく定義されたスコープ
urn:opc:resource:multiresourcescope
を指定する必要があります。異なるリソースに属する複数のスコープがこのスコープなしで指定されている場合、トークン・リクエストは失敗します。 - OAuthクライアントは、複数のアクセス・トークンを含むトークン・レスポンスを解析し、各トークンを使用して各リソース・サービスにアクセスできる必要があります。
明示的な信頼スコープの詳細は、「明示的(特定)信頼スコープの使用」を参照してください。
リクエストおよびレスポンスの例
リクエストおよびレスポンスの例は、完全修飾スコープを使用したクライアント資格証明フローを示しています。
リクエストの例
https://<domainURL>/oauth2/v1/authorize?
client_id=<client-id>&
response_type=code&
redirect_uri=<redirect-url>&
scope=http://abccorp.com/scope1 http://123corp.com/scope1 openid urn:opc:resource:multiresourcescope
curl -i
-H 'Authorization: Basic MzgzZTU4Z….NTM3YjFm' \
--request POST 'https://<domainURL>/oauth2/v1/token' \
-d 'grant_type=authorization_code' \
-d 'code=AgAgYjc1MzgzNWM2NGQxNDA5…YcxU_XdtfLWXUp1Vn4a5uIHiOn4='
curl -i
-H 'Authorization: Basic MzgzZTU4Z….NTM3YjFm' \
--request POST 'https://<domainURL>/oauth2/v1/token' \
-d 'grant_type=client_credentials' \
-d 'scope=http://abccorp.com/scope1 http://123corp.com/scope1 urn:opc:resource:multiresourcescope
レスポンスの例
{
"tokenResponses":[
{
"access_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1Z.....1iZDc2NjFjMWJiZjA0OGNhOTkyMWNlN2Q4MThkNDY0YSIsImp0aSI6Ijg53ZFOT2FxyZYjocCnm1b1w",
"token_type": "Bearer",
"expires_in": 3600
},
{
"access_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1Z.....HplcmtUNjdsU19SjZlYjc5ZDgzMTVhYjQ0ODBiNDlkMjU3NzdkZWMzMDE2In0.k4QShMbO5aPGmYyKo",
"token_type": "Bearer",
"expires_in": 3000
}
],
"id_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1ZHplc.....mtUNjdsU19SYjhQTWoYDSVhTUmDl8zK3a9vk7cowIW2hr3smwtcsvfsbrewwtbnCrGerp7v4CUcVYlSw"
}