OAuth 2を使用したREST APIへのアクセス
アイデンティティ・ドメインREST APIでは、標準SCIM 2.0コア・スキーマおよびOracleスキーマ拡張を使用するSCIM 2.0準拠のエンドポイントをサポートして、ユーザー、グループ、アプリケーションおよびアイデンティティ機能(パスワード管理、管理タスクなど)をプログラムで管理します。アイデンティティ・ドメインへのREST APIコールを行うには、認可に使用するOAuth2アクセス・トークンが必要になります。アクセス・トークンによって、クライアント・アプリケーションがアイデンティティ・ドメインでタスクを実行するために使用するセッション(スコープおよび有効期限あり)が提供されます。
次のシーケンス図は、アイデンティティ・ドメインREST APIにアクセスするためのOAuth 2.0認可フローの基本例を示したものです。
アイデンティティ・ドメインを操作する場合は、特定のOAuth 2.0パラメータを使用します。次の表では、最も一般的なパラメータについて説明します。
| パラメータ | 値 | コメント |
|---|---|---|
|
承認ヘッダー |
基本<base64_clientid_secret> |
ヘッダー内のアクセス・トークンを転送するために、クライアントがBasic認証スキームとして使用します。アクセス・トークン値は、コロンをセパレータにして連結したクライアントIDとクライアント・シークレットのBase64 UTF-8エンコード値である必要があります(たとえば、clientID:clientSecret)。 |
|
クライアントID |
<client_id> |
必須。アイデンティティ・ドメイン・コンソールでアプリケーションを登録するときに生成される一意のAPIキー。 |
|
クライアント・シークレット |
<client_secret> |
必須。アイデンティティ・ドメイン・コンソールでアプリケーションを登録するときに生成されるパスワードに似た秘密キー。この値は共有しないでください。 |
|
アクセス・トークンURL |
/oauth2/v1/token |
アイデンティティ・ドメインからアクセス・トークンを取得するために使用されるエンドポイント。 |
|
認証URL |
/oauth2/v1/authorize |
アイデンティティ・ドメインから認可コードを取得するために使用するエンドポイントで、3レッグOAuthフローに使用されます。 |
|
権限タイプ |
client_credentials |
必須。これは、呼び出されるREST APIがクライアント・アプリケーションによって所有されることを意味します。 |
|
スコープ(必須) |
urn:opc:idm:__myscopes__ |
このスコープはアプリケーションに付与されたすべての付与を返します。必要に応じて、他のスコープを使用して特定の権限を取得できます。 |
ステップ1: コンソールを使用したアイデンティティ・ドメインへの機密アプリケーションの登録
アイデンティティ・ドメイン・コンソールに機密アプリケーションを登録するとき、OAuth 2.0の操作に必要な主要パラメータであるクライアントID、クライアント・シークレットおよびスコープを取得します。OAuth 2.0は委任認可を実装するための標準であり、認可はリソースへのアクセスに必要なアクセス・トークンに基づきます。アクセス・トークンは特定のスコープに対して発行できます。スコープによって、アクセス・トークンの動作、およびアクセス・トークンがアクセスできるリソースが定義されます。アイデンティティ・ドメインにWebアプリケーションを登録する場合は、スコープを追加します。次の例では、ユーザーの検索、編集、作成および削除をリクエストするのに必要なスコープが追加されます。ただし、監査イベントの管理など、他の作業を実行する場合は他のスコープが必要です。
機密アプリケーションを作成して登録するには、OCIコンソールにアクセスし、次のステップを実行します:
- ナビゲーション・メニューを開き、「アイデンティティおよびセキュリティ」を選択します。「アイデンティティ」で、「ドメイン」を選択します。
- 作業するアイデンティティ・ドメインの名前をクリックします。必要なドメインを見つけるには、コンパートメントの変更が必要になる場合があります。次に、「統合アプリケーション」をクリックします。
- 「アプリケーションの追加」を選択します。
- 「アプリケーションの追加」ダイアログ・ボックスで、「機密アプリケーション」を選択し、「ワークフローの起動」を選択します。
- 「アプリケーション詳細の追加」ページで、アプリケーション名と説明を入力し、「次へ」を選択します。
- 「OAuthの構成」ページの「クライアント構成」で、「このアプリケーションをクライアントとして今すぐの構成します」を選択します。
- 「認可」で、「許可される権限付与タイプ」として「クライアント資格証明」のみを選択します。
- ページの下部で、「アプリケーション・ロールの追加」を選択し、「ロールの追加」を選択します。
- 「アプリケーション・ロールの追加」パネルで、「Identity Domain Administrator」を選択し、「追加」を選択します。
- 「次へ」を選択し、「終了」を選択します。
- アプリケーションの詳細ページで、「一般情報」まで下にスクロールします。「クライアントID」および「クライアント・シークレット」をコピーし、安全な場所に格納します。
- アプリケーションの作成後、「アクティブ化」を選択します。
ステップ2: クライアントIDおよびクライアント・シークレットのBase64でのエンコード
base64エンコーディングの前に、クライアントIDとクライアント・シークレットを個別にURLでエンコードします。クライアントIDとクライアント・シークレットに特殊文字が含まれない場合は、最初にURLエンコードする必要はありません。ただし、ベスト・プラクティスとしてこれを行うことをお薦めします。
Windows
-
メモ帳を起動して、クライアントIDとクライアント・シークレットをメモ帳に貼り付けます。
-
クライアントIDとクライアント・シークレットを同じ行に入力し、両者の間にコロンを挿入します:
clientid:clientsecretノート
clientid:clientsecret属性に空白がないことを確認してください。 -
ファイルを
C:\tempに保存し、ファイルの名前をappCreds.txtとします。 -
Windows Explorerで
C:\tempを右クリックし、コンテキスト・メニューから「CMD Prompt Here」を選択します。 -
次のコマンドを入力してクライアントIDおよびクライアント・シークレットをエンコードします。
certutil -encode appCreds.txt appbase64Creds.txt -
メモ帳で
C:\temp\appbase64Creds.txtを開き、内容をコピーしてからファイルを閉じます。ノート
セキュリティ関連の理由から、終わったらappCreds.txtとappbase64Creds.txtファイルは削除してください。
MacおよびLinux
-
優先ノート・ユーティリティ(Mac Notes、gedit Linux、Viなど)を起動して、クライアントIDとクライアント・シークレットをノート・ユーティリティで貼り付けます。
クライアントIDとクライアント・シークレットを同じ行に入力し、両者の間にコロンを挿入します:
clientid:clientsecretノート文。
clientid:clientsecretにスペースがないことを確認します。-
clientid:clientsecret行をコピーします。 -
ターミナルを起動して次のコマンドを入力します。
clientid:clientsecretの部分は、クリップボードにコピーした値を置き換えてください。echo -n "clientid:clientsecret" | base64 -w 0ノート
Linuxの場合、コマンドに-w 0を追加して改行を削除します。 -
返される値をコピーします。ノート
返された値を複数の行に分割した場合は、テキスト・エディタに戻り、結果全体がテキストの折返しがない1行になっていることを確認します。
ステップ3: アクセス・トークンの取得
このプロセスの次のステップでは、アクセス・トークンをリクエストします。
-
コマンド・プロンプトを起動します。
-
次のcURLコマンドを入力します。その際にカッコ( < > )内のテキストは適切な値に置き換えてください。
curl -i -H "Authorization: Basic <base64encoded clientid:secret>" -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:idm:__myscopes__"ノート
UNIX OSを使用している場合は、cURLコマンドの末尾に| awk -F"\"" '{print $4}'を追加して、Bearerトークンのみを解析できます。トークンのデフォルトの有効期限は、リクエスト時間から3600秒です。ノート
オプションで、次のcURLコマンドを実行して、環境内のAccessTokenValueというUNIX変数を介してアクセス・トークン値にアクセスできるようにします:
その後、export AccessTokenValue=`curl -i -H "Authorization: Basic <base64encoded clientid:secret>" -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:idm:__myscopes__" | awk -F"\"" '{print $4}' | tail -n +16`echo $AccessTokenValueコマンドを実行して、アクセス・トークン値を取得できます。カッコ内のテキスト 値 base64encodedクライアントID: シークレット Base64「クライアントIDおよびクライアント・シークレットのエンコード」の項で生成されたエンコード済資格証明に置き換えます。clientid:clientsecret資格証明にスペースがないことを確認します。 IDCS_Service_Instance アイデンティティ・ドメインのURLに置き換えます(たとえば、 https://<domainURL>/).)。ノート
コマンド内のurn:opc:idm:__myscopes__スコープは、OAuth認可サーバーからのアクセス・トークンをリクエストするアイデンティティ・ドメイン・クライアントによってタグとして使用されています。リクエスト元のクライアントに付与されたアイデンティティ・ドメイン管理者ロールおよびクライアントのリクエストで指定されたユーザー(存在する場合)によって表される権限に基づいて、適用可能なすべてのアイデンティティ・ドメイン・スコープを含むアクセス・トークンが返されます。このスコープは、アイデンティティ・ドメイン管理者ロールに直接付与されません。 -
レスポンスの
access_token値をコピーします。実際のトークン(引用符内にたaccess_token値)のみをコピーするようにします。Status: 200 "access_token":"eyJ4NXQiOiI4Wk. . ." "token":"Bearer", "expires_in":3600ノート
レスポンスにはexpires_in: 3600パラメータが含まれています。これは、トークンの生成から1時間後に、そのトークンが無効になることを意味します。1時間経過すると、トークンをリフレッシュするか、新しいアクセス・トークンを取得する必要があります。次のcURLコマンドを入力します。その際にカッコ( < > )内のテキストは適切な値に置き換えてください。curl -i -H "Authorization: Basic <base64 encoded client ID and secret>" -H "Content-Type: application/x-www-form-urlencoded;charset=UTF-8" --request POST https://<domainURL>/oauth2/v1/token -d "grant_type=refresh_token&refresh_token=<token_value>"
ステップ4: 環境へのRESTリクエストの実行
OAuth 2.0アクセス・トークンを取得した後、cURLコマンドでそのトークンを使用して、アイデンティティ・ドメインREST APIにRESTリクエストを送信できます。次のコマンドは、アイデンティティ・ドメイン内のユーザーのリストを返します。
curl -X GET
-H "Content-Type:application/scim+json"
-H "Authorization: Bearer <access_token>"
https://<domainURL>/admin/v1/Users
| 項目 | 値 |
|---|---|
| 方法 | -X取得 |
| コンテンツ・タイプ・ヘッダー | -H "Content-Type:application/scim-json" |
| 承認ヘッダー | -H "認可: Bearer <access_token>" |
| HTTPプロトコル | HTTPまたはHTTPS (HTTPをお薦めします) |
| アイデンティティ・ドメイン | アイデンティティ・ドメインURL (https://<domainURL>).など) |
| アイデンティティ・ドメインRESTエンドポイント | /admin/v1/Users |
アイデンティティ・ドメインREST APIからのJSON出力の例
前のステップで、cURLを使用して送信されたRESTリクエストからレスポンスがJSON形式で返されました。JSONは、アプリケーションに必要な特定の属性の取得など、ニーズに応じてフォーマットまたは解析できるオープン規格です。
{
"schemas": [
"urn:scim:api:messages:2.0:ListResponse"
],
"totalResults": 1,
"Resources": [
{
"displayName": "admin opc",
"name": {
"givenName": "admin",
"formatted": "admin opc",
"familyName": "opc"
},
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
"locked": {
"on": false
}
},
"userName": "admin@example.com",
"id": "d252a54d83c344eb8f59f7053a0562ce",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
"isFederatedUser": false
},
"active": true,
"nickName": "TAS_TENANT_ADMIN_USER",
"emails": [
{
"verified": false,
"value": "admin@example.com",
"type": "work",
"primary": true
},
{
"verified": false,
"value": "admin@example.com",
"primary": false,
"type": "recovery"
}
],
"schemas": [
"urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User",
"urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
"urn:ietf:params:scim:schemas:core:2.0:User"
],
"meta": {
"resourceType": "User",
"created": "2022-07-22T18:11:08Z",
"lastModified": "2022-07-25T21:19:28Z",
"location": "https://<domainURL>admin/v1/Users/d252a54d83c344eb8f59f7053a0562ce"
},
"idcsLastModifiedBy": {
"value": "idcssso",
"$ref": "https://<domainURL>admin/v1/Apps/idcssso",
"type": "App",
"display": "idcssso"
}
}
],
"startIndex": 1,
"itemsPerPage": 50
}