スコープ
スコープ・パラメータを使用すると、アクセス・トークンにより異なるレベルのアクセス権を複数の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::readurn:opc:resource:consumer:paas:stack::allurn: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,の場合、これはクライアント・アプリケーションによって定義された許可されたスコープのいずれでもないため、クライアントはリソースにアクセスできません。
リクエストおよびレスポンスの例
次の例は、クライアント資格証明およびリソース所有者の権限付与フローのリクエストとレスポンスの例を示しています。
クライアント資格証明フロー・リクエストの例
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::readurn:opc:resource:consumer:paas:stack::allurn: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,の場合、これはクライアント・アプリケーションによって定義された許可されたスコープのいずれでもないため、クライアントはリソースにアクセスできません。
リクエストおよびレスポンスの例
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信頼スコープの使用方法」および「タグ信頼スコープの使用方法」を参照してください。
リクエストおよびレスポンスの例
リクエストおよびレスポンスの例は、完全修飾スコープを使用したクライアント資格証明フローを示しています。
リクエストの例
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信頼スコープは、クライアントとターゲット・サービスの間に明示的な関連付けが存在するサービスに対してのみ信頼スコープを定義します。単一の認可リクエストまたはトークン・リクエストで異なるリソースに属する複数のスコープを指定し、各リソースのスコープを含む各アクセス・トークンと引き換えに複数のアクセス・トークンを取得できます。
- 認可リクエストまたはトークン・リクエストで、新しく定義されたスコープ
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"
}