onBehalfOfで許可された操作の使用

onBehalfOf許可操作は、アクセス権限をユーザーの権限のみから生成できるようにして、クライアント・アプリケーションがそれ自体では通常はアクセスできない場合でも、そのユーザーがアクセス権を持つエンドポイントにアクセスできるようにする方法を提供します。

認可されたクライアント・アプリケーションがアイデンティティ・ドメイン・エンドポイントにアクセスするために必要な機能を実装する場合、クライアントには、それに必要な権限が付与されます。一方、Webアプリケーション・クライアントは、ログインしたユーザーから取得した権限とスコープを使用して、クライアント・アプリケーションがエンドポイントにアクセスするには、その機能を実装します。アイデンティティ・ドメインのデフォルトの認可動作では、そのクライアントは、ユーザーに付与された権限に関係なく、それらのエンドポイントにアクセスするために必要な権限の完全なセットを引き続き持っている必要があります。onBehalfOf許可操作は、管理者に、ユーザーのスコープ(ユーザーが存在する場合)とクライアントのスコープの共通部分ではなく、ユーザーの権限のみを使用する必要があることを示す方法を提供します。

パブリック・アプリケーションやCLIアプリケーションには非常に限定的な権限があり、エンドポイントにアクセスする権限はありません。これらのタイプのクライアントは、アプリケーションにアクセスしているユーザーに依存して、そのアプリケーションが持っている権限を決定します。ユーザーがパブリック・アプリケーションにアクセスしているときに、ユーザーにユーザーの権限だけで構成されたアクセス・トークンが発行された場合は、ユーザーが認可されているかぎり、そのユーザーはエンドポイントにアクセスできます。

onBehalfOf操作により、OAuthクライアント・アプリケーションなどのアクセス・トークンを生成できます。アイデンティティ・ドメイン固有のスコープ("urn:opc:idm:"で始まるスコープ)を計算してアクセス・トークンに設定すると、アイデンティティ・ドメインはクライアントの権限を無視して、認可ユーザーに当初付与されたスコープ以下のスコープを使用します。そのため、リクエストされたスコープに関連するユーザーの権限(管理ロール、グループなど)のみが、アクセスの特定に使用されます。リクエストされたスコープ"urn:opc:idm:_myscopes_"が使用された場合は、ユーザーに付与されたすべてのスコープが返されます。

onBehalfOf操作の有効化

アイデンティティ・ドメインREST APIを使用してOAuthアプリケーションを作成または更新し、onBehalfOfUserを許可された操作として指定します。アイデンティティ・ドメインUIを使用してOAuthアプリケーションを作成する場合は、「認証」ページで、「代理」許可操作のチェック・ボックスを選択します。ユーザーがアプリケーションにアクセスすると、ユーザーのアクセス権限に基づいて、様々な機能を実行できます。

この例では、アプリケーションを作成し、onBehalfOfUser実行可能な操作(この例で大胆に説明します)を指定する方法を示します。

cat</tmp/OAuthClientApp.json << __EOF__
{
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:App"
  ],
  "displayName": "publicClientApp",
  "isOAuthClient": true,
  "description": "public client",
  "active": true,
  "clientType": "public",
  "basedOnTemplate": {
    "value": "CustomBrowserMobileTemplateId"
  },
  "redirectUris": [
    "http://example.com:9090/demoapp/return",
    "http://example.com:9090/IDCSPlayground"
  ],
  "logoutUri": "http://example.com:9090/demoapp/logout.jsp",
  "postLogoutRedirectUris": ["http://example.com:9090/demoapp/logout.jsp"],
  "allowedScopes": [
    {
      "fqs": "http://example.com/photos"
    },
    {
      "fqs": "http://example.com/presentations"
    },
    {
      "fqs": "http://example.com/documents"
    }
  ],
  "allowedOperations": [
    "onBehalfOfUser"   ],
  "allowedGrants": [
    "authorization_code",
    "implicit"
  ]
}
__EOF__
   
curl -X POST 
-H "Content-type: application/json" 
-H "Authorization: Bearer <access token value>" 
--data @/tmp/OAuthClientApp.json http://<domainURL>/admin/v1/Apps