0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OCI】IAM Identity Domainを使ってユーザ登録してみる

Posted at

はじめに

今回はOracle Cloud Infrastructure(OCI)のIAM Identity DomainのAPI機能を使って
ユーザを作成し、そのユーザをグループに所属させるところまでをやってみたいと思います。

以前、似たような検証としてAPI Gatewayに認証をかけるということを
やってみたのでこちらも参考にしてみてください。

【OCI】IAM Identity Domainを使ってAPI Gatewayに認証を実装してみる
https://qiita.com/atwits/items/f4076c9f38167b1b6fa1

■今回のAPI機能検証の流れ
①IAM Identity Domainの設定 [*APIをコールするための統合アプリケーションの作成]
②トークン(JWT)の発行 [*APIで使用するための認証トークンの発行]
③ユーザ作成
④グループ検索 [*ユーザを追加するグループのIDを検索]
⑤グループへのユーザ追加

■公式ドキュメント
・トークン取得
https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/op-oauth2-v1-token-post.html

・ユーザー作成
https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/op-admin-v1-users-post.html

・グループ検索
https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/op-admin-v1-groups-id-get.html

・グループ更新(ユーザ追加)
https://docs.oracle.com/cd/E83857_01/paas/identity-cloud/rest-api/op-admin-v1-groups-id-patch.html

◆目次
1.IAM Identity Domainの設定
2.APIの動作検証

1. IAM Identity Domainの設定

それでは早速、IAM Identity Domainの設定に入りますが、
APIをコールするためには統合アプリケーションが必要なので
その設定を行います。

OCIにログインしたら、左上メニュー[Ξ]から
[アイデンティティとセキュリティ] - [ドメイン]を選択します。
image.png

次にOracleIdentityCloudServiceドメインを選択します。
image.png

ここでは後でAPIのエンドポイントとして使うため、
ドメインURLをコピー(保存)しておき、統合アプリケーションを選択します。
image.png

続いてアプリケーションの追加を実行します。
image.png

機密アプリケーションを選択して、ワークフローの起動を実行します。
image.png

任意の名前(ここではapp_jwt)をつけて次を押します。
image.png

「このアプリケーションをリソース・サーバーとして今すぐ構成します」の
ラジオボタンを選択します。
image.png

今回は特に使用しませんのでプライマリ・オーディエンスに任意の値を入れます。
image.png

そのまま「このアプリケーションをクライアントとして今すぐ構成します」の
ラジオボタンを選択します。
image.png

クライアント資格証明を選択します。
image.png

ここでは下記を選択します。
クライアント・タイプ: 機密
IDトークン暗号化アルゴリズム: A256CBC-HS512
クライアントIPアドレス: 任意の場所
認可されたリソース: すべて
image.png

さらに下にスクロールしてアプリケーション・ロールの追加から
「Identity Domain Administrator」を追加して次に進みます。
image.png

最後に「スキップして後で実行」を選択したまま、終了を実行します。
image.png

統合アプリケーションの作成が完了したらアクティブ化します。
image.png

下の方にスクロースするとクライアントID、クライアント・シークレットがあるので
コピーしておきます。
image.png

以上でIAM Identity Domain(統合アプリケーション)の設定は終了です。

2. APIの動作検証

それではAPIの動作検証をしてみます。

[1] トークン(JWT)の発行
最初にAPI実行で必要なアクセストークンを発行します。

[Method] POST
[Endpoint] <ドメインURL>/oauth2/v1/token
[Header] 
  Content-Type: application/x-www-form-urlencoded
  Authorization: Basic <Base64認証値>
[Body]
  grant_type=client_credentials&scope=urn:opc:idm:__myscopes__

ドメインURL 例. https://idcs-263db******.identity.oraclecloud.com

■Base64認証値の生成方法

例.
クライアントID: ABCDE
クライアント・シークレット: 12345

クライアント・シークレットを「:」でつなげた文字列を作成
→ ABCDE:12345

それをBase64エンコードしたもの
→ QUJDREU6MTIzNDU=

最終的なヘッダーは以下のようなイメージとなります。
Authorization: Basic QUJDREU6MTIzNDU=

上記設定した上でPOSTを実行すると下記のようなレスポンスが返ってきますので
このaccess_tokenをコピーしておきます。

{
    "access_token": "eyJ4NXQcN5zdEKfw*****",
    "token_type": "Bearer",
    "expires_in": 3600
}

[2] ユーザ作成

前述の処理で発行したトークンをヘッダーのauthorization埋め込みます。
Body部分はパラメータが多いので詳しくは公式ドキュメントを参照して頂くとして、
項目としては以下4つくらいを意識して変更してください。

givenName: ファーストネーム
familyName: ラストネーム
userName: ログインID (メールアドレスと一緒にするケースが多い)
emails: メールアドレス

[Method] POST
[Endpoint] <ドメインURL>/admin/v1/Users
[Header] 
 Content-Type: application/json
 authorization: Bearer <トークン>
[Body]
 {
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User"
  ],
  "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
    "isFederatedUser": false
  },
  "name": {
    "givenName": "FirstName",
    "familyName": "LastName"
  },
  "userName": "xxxx@test.com",
  "emails": [
    {
      "value": "xxxx@test.com",
      "type": "work",
      "primary": true
    }
  ]
 }

実行して処理が正常に完了するとユーザが作成されて次のような
レスポンスが返ってきますので、「id」の値をメモっておきます。
→ "id": "86546b***",

{
    "idcsCreatedBy": {
        "type": "App",
        "display": "app_jwt",
        "value": "81870d***",
        "ocid": "ocid1.domainapp.oc1.ap-tokyo-1.***",
        "$ref": "https://idcs-8b3cbe***.identity.oraclecloud.com:443/admin/v1/Apps/81870***"
    },
    "id": "86546b***",
    "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User": {
        "isFederatedUser": false,
        "preferredUiLandingPage": "MyApps"
    },
    "meta": {
        "created": "2025-01-23T17:15:17.724Z",
        "lastModified": "2025-01-23T17:15:17.724Z",
        "version": "12042348f9514415ae2e7863729d4dd2",
        "resourceType": "User",
        "location": "https://idcs-8b3cbe***.identity.oraclecloud.com:443/admin/v1/Users/86546***"
    },
    "active": true,
    "displayName": "FirstName LastName",
    "idcsLastModifiedBy": {
        "value": "81870d***",
        "display": "app_jwt",
        "ocid": "ocid1.domainapp.oc1.ap-tokyo-1.amaaaa***",
        "type": "App",
        "$ref": "https://idcs-8b3cbe***.identity.oraclecloud.com:443/admin/v1/Apps/81870d***"
    },
    "name": {
        "givenName": "FirstName",
        "familyName": "LastName",
        "formatted": "FirstName LastName"
    },
    "urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User": {
        "locked": {
            "on": false
        }
    },
    "ocid": "ocid1.user.oc1..aaaaa***",
    "userName": "xxxx@test.com",
    "emails": [
        {
            "verified": false,
            "primary": false,
            "secondary": false,
            "value": "xxxx@test.com",
            "type": "recovery"
        },
        {
            "verified": false,
            "primary": true,
            "secondary": false,
            "value": "xxxx@test.com",
            "type": "work"
        }
    ],
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:userState:User",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:user:User"
    ],
    "domainOcid": "ocid1.domain.oc1..aaaaa***",
    "compartmentOcid": "ocid1.tenancy.oc1..aaaaa***",
    "tenancyOcid": "ocid1.tenancy.oc1..aaaaa***",
    "urn:ietf:params:scim:schemas:oracle:idcs:extension:capabilities:User": {
        "canUseApiKeys": true,
        "canUseAuthTokens": true,
        "canUseConsolePassword": true,
        "canUseCustomerSecretKeys": true,
        "canUseOAuth2ClientCredentials": true,
        "canUseSmtpCredentials": true,
        "canUseDbCredentials": true
    }
}

[3] グループ検索

続いてユーザを追加するグループのIDを検索します。
こちらもトークンはセットします。

[Method] GET
[Endpoint] <ドメインURL>/admin/v1/Groups
[Header] 
 Content-Type: application/json
 authorization: Bearer <トークン>

実行すると下記のようなレスポンスが返りますが
今回はOCI_Administratorsグループにユーザを登録するので
「id」の値をメモっておきます。
→ "id": "f9477***",

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "totalResults": 5,
    "Resources": [
        {
            "displayName": "OCI_Administrators",
            "idcsLastModifiedBy": {
                "type": "App",
                "value": "UnAuthenticated",
                "display": "COMPUTEBAREMETAL",
                "$ref": "https://idcs-8b3cbe***.identity.oraclecloud.com:443/admin/v1/Apps/UnAuthenticated"
            },
            "idcsCreatedBy": {
                "type": "App",
                "display": "COMPUTEBAREMETAL",
                "value": "baefd2c10ac14dc7ba22ab9402e1f4b2",
                "$ref": "https://idcs-8b3cbe9805e546f0b1b81078839f1b75.identity.oraclecloud.com:443/admin/v1/Apps/baefd2c10ac14dc7ba22ab9402e1f4b2"
            },
            "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
                "description": "Group mapped to the Administrators group in the OCI account"
            },
            "id": "f9477***",
            "ocid": "ocid1.group.oc1..aaaaaaaa7onqgwu6i7gniwj4zohwuf7o6kzj3hlwvhhtpo2rowoagg4a333q",
            "meta": {
                "created": "2019-12-30T12:15:28.646Z",
                "lastModified": "2022-01-22T17:50:39Z",
                "resourceType": "Group",
                "location": "https://idcs-8b3cbe9805e546f0b1b81078839f1b75.identity.oraclecloud.com:443/admin/v1/Groups/f94778e74a704558a423f7c3023758fb"
            },
            "externalId": "123456",
~~

[4] グループへのユーザ追加

最後に作成したユーザのグループ追加です。
エンドポイントの一番後ろにOCI_AdministratorsグループのIDを設定して
Body部分のvalueに作成したユーザのIDをセットしてPOSTすると
グループにユーザが追加されます。

[Method] PATCH
[Endpoint] <ドメインURL>/admin/v1/Groups/<グループのID>
[Header] 
 Content-Type: application/json
 authorization: Bearer <トークン>
[Body]
{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
        {
            "op": "add",
            "path": "members",
            "value": [
                {
                    "value": "86546b***",
                    "type": "User"
                }
            ]
        }
    ]
}

正常にグループ追加が完了すると以下のようなレスポンスが返ります。

{
    "displayName": "OCI_Administrators",
    "idcsLastModifiedBy": {
        "type": "App",
        "value": "UnAuthenticated",
        "display": "COMPUTEBAREMETAL",
        "$ref": "https://idcs-8b3cb***.identity.oraclecloud.com:443/admin/v1/Apps/UnAuthenticated"
    },
    "idcsCreatedBy": {
        "type": "App",
        "display": "COMPUTEBAREMETAL",
        "value": "baefd***",
        "$ref": "https://idcs-8b3cbe***.identity.oraclecloud.com:443/admin/v1/Apps/baefd***2"
    },
    "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group": {
        "description": "Group mapped to the Administrators group in the OCI account"
    },
    "id": "f9477***",
    "ocid": "ocid1.group.oc1..aaaaa***",
    "meta": {
        "created": "2019-12-30T12:15:28.646Z",
        "lastModified": "2022-01-22T17:50:39Z",
        "resourceType": "Group",
        "location": "https://idcs-8b3cbe***.identity.oraclecloud.com:443/admin/v1/Groups/f9477***"
    },
    "externalId": "123456",
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Group",
        "urn:ietf:params:scim:schemas:oracle:idcs:extension:group:Group"
    ],
    "domainOcid": "ocid1.domain.oc1..aaaaa***",
    "compartmentOcid": "ocid1.tenancy.oc1..aaaaa***",
    "tenancyOcid": "ocid1.tenancy.oc1..aaaaa***"
}

以上でAPI動作検証は終了です。

おわり

以上、IAM Identity DomainのAPI機能を使って簡単にユーザ作成、グループ追加ができました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?