スコープ

アクセス・トークンでは、スコープ・パラメータを使用して、異なるレベルのアクセス権を複数の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");

アプリケーションにスコープが定義されていない

アプリケーションにスコープが定義されていない場合(たとえば、ユーザーがサインインしてOAuthアクセス・トークンを取得する場合)、/oauth2/v1/authorizeエンドポイントへのブラウザベースのログイン・フロー・リクエストで次のスコープを指定できます:
  • scope=openid: 結果のアクセス・トークンは、最小ユーザー情報を提供する/oauth2/c1/userinfoとともに使用できます。

  • scope=openid approles groups: 生成されるアクセス・トークンと/oauth2/v1/userinfoを使用して、ユーザーのロールおよびグループを取得できます。

トラスト・スコープの使用

信頼スコープは、OAuthクライアントによるリソースへのアクセス方法を定義します。信頼スコープにより、信頼できるクライアント・アプリケーションまたは機密クライアント・アプリケーションが、アイデンティティ・ドメイン内のすべてのリソース(Account)、定義されたタグに基づいた他のリソース(Tags)、またはクライアントとサービスの間に明示的な関連付けが存在するサービスのみ(Explicit)へのアクセス権を付与するアクセス・トークンを取得できます。

ノート

trustScopeパラメータを定義するオプションは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションでのみ使用できます。このオプションは、パブリック・クライアント・アプリケーションでは使用できません。
信頼スコープを使用する場合は、次のガイドラインを使用します。
Note

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__を続行する必要があります。「スコープ」を参照してください。

  • クライアント・アプリケーションによってリクエストされたスコープは常に存在し、クライアントがリソースにアクセスできるように、クライアントの定義済の許可されているスコープと直接または階層的に一致する必要があります。

  • ExplicittrustScope値は、トラステッド・クライアント・アプリケーションと機密クライアント・アプリケーションにデフォルトで割り当てられ、クライアント・アプリケーションは、クライアントとターゲット・サービス間の明示的な関連付けに基づいて、権限を持つアクセス・トークンを取得できます。AllまたはTaggedオプションを使用するには、AllまたはTags.trustScope値を使用してクライアント・アプリケーションを更新する必要があります。

  • urn:opc:resource:consumer::allスコープを使用したアイデンティティ伝播トークン・リクエストの場合、生成されるアクセス・トークンにはurn:opc:resource:consumer::allスコープは含まれません。

使用可能な各trustScopeの詳細は、次のとおりです:

Account信頼スコープの使用

Account信頼スコープを使用すると、トラスト・クライアント・アプリケーションまたは機密クライアント・アプリケーションは、ターゲット・サービスとの明示的なアソシエーションを必要とせずに、同じアイデンティティ・ドメイン内の任意のサービスへのアクセス権を付与するアクセス・トークンを取得できます。

ノート

trustScopeパラメータを定義するオプションは、トラステッド・クライアント・アプリケーションおよび機密クライアント・アプリケーションでのみ使用できます。このオプションは、パブリック・クライアント・アプリケーションでは使用できません。

Account信頼スコープを使用するには:

  1. Accountの値を、適切なトラステッド・クライアント・アプリケーションのtrustScopeパラメータに割り当てます。

    ノート

    AccounttrustScope属性は、アイデンティティ・ドメイン・コンソールで「すべて」という名前になります。

    trustScopeパラメータを指す赤い矢印を使用したリクエストの例の一部。

  2. 信頼できるクライアントまたは機密クライアントを使用してアクセス・トークンをリクエストし、スコープ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

クライアント・アプリケーションからリクエストされたスコープは、クライアントがリソースにアクセスできるように、クライアントの許可されているスコープの少なくとも1つと直接または階層的に一致する必要があります。たとえば、クライアント・アプリケーションは、リソースへのアクセス・リクエストで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信頼スコープを使用するには:

  1. Tagsの値をtrustScopeパラメータに割り当て、クライアント・アプリケーションが他のアプリケーションからタグにアクセスできるようにします。

    ノート

    TagstrustScope属性は、アイデンティティ・ドメイン・コンソールでタグ付けという名前になります。
  2. AllowedTagsパラメータのkey:valueペアを定義します。

    ノート

    これらのステップでは、適切なリソース・アプリケーションでTags属性にkey:valueペアが定義されており、クライアント・アプリケーションのallowedTags属性のリストの少なくとも1つのkey:valueペアがリソース・アプリケーションのTags属性の1つのkey:valueペアと一致することを前提としています。

    赤色の矢印がtrustScopeパラメータおよびallowedTagsパラメータを指しているリクエストの例の一部。

  3. 信頼できるクライアントまたは機密クライアントを使用してアクセス・トークンをリクエストし、スコープ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

クライアント・アプリケーションからリクエストされたスコープは、クライアントがリソースにアクセスできるように、クライアントの許可されているスコープの少なくとも1つと直接または階層的に一致する必要があります。たとえば、クライアント・アプリケーションは、リソースへのアクセス・リクエストで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値を使用してクライアント・アプリケーションを更新する必要があります。

ノート

ExplicittrustScope属性は、アイデンティティ・ドメインで「特定」という名前になります。

「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クライアントは、複数のアクセス・トークンを含むトークン・レスポンスを解析し、各トークンを使用して各リソース・サービスにアクセスできる必要があります。
ノート

この機能は、「暗黙的」フローを除くすべての付与タイプで使用できます。Implicit Grant Typeを参照してください。

明示的な信頼スコープの詳細は、「明示的(特定)信頼スコープの使用」を参照してください。

リクエストおよびレスポンスの例

リクエストおよびレスポンスの例は、完全修飾スコープを使用したクライアント資格証明フローを示しています。

リクエストの例

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" 
}