Azure Active Directory での SCIM のユーザー プロビジョニングSCIM user provisioning with Azure Active Directory

System for Cross-Domain Identity Management (SCIM) は、システムとの間で ID を管理する方法の一貫性を高めることを目的とした、標準化されたプロトコルとスキーマです。System for Cross-Domain Identity Management (SCIM) is standardized protocol and schema that aims to drive greater consistency in how identities are managed across systems. アプリケーションでユーザー管理のために SCIM エンドポイントがサポートされている場合、Azure AD ユーザー プロビジョニング サービスからこのエンドポイントに対して、割り当てられたユーザーとグループの作成、変更、削除要求を送信することができます。When an application supports a SCIM endpoint for user management, the Azure AD user provisioning service can send requests to create, modify, or delete assigned users and groups to this endpoint.

Azure AD が事前統合された自動ユーザー プロビジョニングをサポートしているアプリケーションの多くで、SCIM がユーザー変更通知の受信手段として実装されています。Many of the applications for which Azure AD supports pre-integrated automatic user provisioning implement SCIM as the means to receive user change notifications. さらに、お客様は Azure portal で一般的な "ギャラリー以外の" 統合オプションを使用することにより、SCIM 2.0 プロトコル仕様の特定のプロファイルをサポートするアプリケーションを接続することができます。In addition to these, customers can connect applications that support a specific profile of the SCIM 2.0 protocol specification using the generic "non-gallery" integration option in the Azure portal.

この記事では主に、ギャラリー以外のアプリの一般的な SCIM コネクタの一部として Azure AD によって実装される、SCIM 2.0 のプロファイルについて説明します。The main focus of this article is on the profile of SCIM 2.0 that Azure AD implements as part of its generic SCIM connector for non-gallery apps. ただし、一般的な Azure AD コネクタを使用した SCIM をサポートするアプリケーションのテストに成功することは、ユーザー プロビジョニングをサポートしているアプリとして Azure AD ギャラリーにリストされたアプリを取得するための手順です。However, successful testing of an application that supports SCIM with the generic Azure AD connector is a step to getting an app listed in the Azure AD gallery as supporting user provisioning. Azure AD アプリケーション ギャラリーでアプリケーションを一覧表示する方法の詳細については、Azure AD アプリケーション ギャラリーでアプリケーションを一覧表示する方法に関するページを参照してください。For more information on getting your application listed in the Azure AD application gallery, see How to: List your application in the Azure AD application gallery.

重要

Azure AD SCIM の実装の動作は、2018 年 12 月 18 日に最終更新が行われました。The behavior of the Azure AD SCIM implementation was last updated on December 18, 2018. 変更点については、Azure AD ユーザー プロビジョニング サービスの SCIM 2.0 プロトコルへのコンプライアンスに関する記事をご覧ください。For information on what changed, see SCIM 2.0 protocol compliance of the Azure AD User Provisioning service.

Azure AD からアプリまたは ID ストアへのプロビジョニングを示しますShows provisioning from Azure AD to an app or identity store
"図 1:SCIM が実装されたアプリケーションまたは ID ストアへの Azure Active Directory からのプロビジョニングFigure 1: Provisioning from Azure Active Directory to an application or identity store that implements SCIM

この記事は、次の 4 つのセクションに分かれています。This article is split into four sections:

SCIM をサポートするアプリケーションにユーザーとグループをプロビジョニングするProvisioning users and groups to applications that support SCIM

Azure AD は、割り当てられたユーザーとグループを、SCIM 2.0 プロトコルの特定のプロファイルを実装したアプリケーションに自動的にプロビジョニングするように構成できます。Azure AD can be configured to automatically provision assigned users and groups to applications that implement a specific profile of the SCIM 2.0 protocol. プロファイルの仕様は、「Azure AD SCIM の実装について」に記載されています。The specifics of the profile are documented in Understanding the Azure AD SCIM implementation.

これらの要件との互換性に関する記述については、アプリケーション プロバイダー、またはアプリケーション プロバイダーのドキュメントを確認してください。Check with your application provider, or your application provider's documentation for statements of compatibility with these requirements.

重要

Azure AD SCIM 実装は、Azure AD とターゲット アプリケーション間でユーザーを常に同期するように設計された Azure AD ユーザー プロビジョニング サービスの上に構築され、固有の標準操作セットを実装しています。The Azure AD SCIM implementation is built on top of the Azure AD user provisioning service, which is designed to constantly keep users in sync between Azure AD and the target application, and implements a very specific set of standard operations. Azure AD SCIM クライアントの動作を理解するには、これらの動作を把握しておくことが重要です。It's important to understand these behaviors to understand the behavior of the Azure AD SCIM client. 詳細については、「プロビジョニング中の動作」を参照してください。For more information, see What happens during user provisioning?.

使用の開始Getting started

この記事で説明した SCIM プロファイルをサポートするアプリケーションは、Azure AD アプリケーション ギャラリーの "ギャラリー以外のアプリケーション" 機能を使用して Azure Active Directory に接続できます。Applications that support the SCIM profile described in this article can be connected to Azure Active Directory using the "non-gallery application" feature in the Azure AD application gallery. 接続が完了すると、Azure AD は 40 分ごとに同期処理を実行します。この処理では、割り当て済みのユーザーとグループについてアプリケーションの SCIM エンドポイントに照会し、割り当ての詳細に従ってユーザーとグループを作成または変更します。Once connected, Azure AD runs a synchronization process every 40 minutes where it queries the application's SCIM endpoint for assigned users and groups, and creates or modifies them according to the assignment details.

SCIM をサポートするアプリケーションを接続するには:To connect an application that supports SCIM:

  1. Azure Active Directory ポータルにサインインします。Sign in to the Azure Active Directory portal. 開発者プログラムにサインアップすることにより、P2 ライセンスで Azure Active Directory の無料試用版にアクセスできることに注意してくださいNote that you can get access a free trial for Azure Active Directory with P2 licenses by signing up for the developer program

  2. 左側のウィンドウで、 [エンタープライズ アプリケーション] を選択します。Select Enterprise applications from the left pane. ギャラリーから追加されたアプリを含む、構成済みのすべてのアプリの一覧が表示されます。A list of all configured apps is shown, including apps that were added from the gallery.

  3. [+ 新しいアプリケーション] > [すべて] > [ギャラリー以外のアプリケーション] の順に選択します。Select + New application > All > Non-gallery application.

  4. アプリケーションの名前を入力し、 [追加] を選択してアプリ オブジェクトを作成します。Enter a name for your application, and select Add to create an app object. 新しいアプリがエンタープライズ アプリケーションの一覧に追加され、そのアプリの管理画面が開きます。The new app is added to the list of enterprise applications and opens to its app management screen.

    Azure AD アプリケーション ギャラリーを示すスクリーンショットScreenshot shows the Azure AD application gallery
    "図 2:Azure AD アプリケーション ギャラリーの使用Figure 2: Azure AD application gallery

  5. アプリの管理画面で、左側のパネルにある [プロビジョニング] を選択します。In the app management screen, select Provisioning in the left panel.

  6. [プロビジョニング モード] メニューの [自動] を選択します。In the Provisioning Mode menu, select Automatic.

    例:Azure portal のアプリのプロビジョニング ページExample: An app's Provisioning page in the Azure portal
    "図 3:Azure portal でのプロビジョニングの構成Figure 3: Configuring provisioning in the Azure portal

  7. [テナント URL] フィールドに、アプリケーションの SCIM エンドポイントの URL を入力します。In the Tenant URL field, enter the URL of the application's SCIM endpoint. 例: https://api.contoso.com/scim/Example: https://api.contoso.com/scim/

  8. SCIM エンドポイントで、Azure AD 以外の発行者からの OAuth ベアラー トークンを必要とする場合は、必要な OAuth ベアラー トークンをオプションの [シークレット トークン] フィールドにコピーします。If the SCIM endpoint requires an OAuth bearer token from an issuer other than Azure AD, then copy the required OAuth bearer token into the optional Secret Token field. このフィールドを空白のままにすると、Azure AD では各要求に Azure AD を発行元とする OAuth ベアラー トークンを含めます。If this field is left blank, Azure AD includes an OAuth bearer token issued from Azure AD with each request. ID プロバイダーとして Azure AD を使用するアプリは、この Azure AD によって発行されたトークンを検証できます。Apps that use Azure AD as an identity provider can validate this Azure AD-issued token.

  9. [テスト接続] を選択して、Azure Active Directory による SCIM エンドポイントへの接続を試みます。Select Test Connection to have Azure Active Directory attempt to connect to the SCIM endpoint. 試行に失敗した場合は、エラー情報が表示されます。If the attempt fails, error information is displayed.

    注意

    テスト接続では、Azure AD 構成で照合プロパティとして選択されたランダムな GUID を使用して、存在しないユーザー用の SCIM エンドポイントのクエリが実行されます。Test Connection queries the SCIM endpoint for a user that doesn't exist, using a random GUID as the matching property selected in the Azure AD configuration. 想定される適切な応答は、HTTP 200 OK と空の SCIM ListResponse メッセージです。The expected correct response is HTTP 200 OK with an empty SCIM ListResponse message.

  10. アプリケーションへの接続の試行に成功した場合は、 [保存] を選択して管理者資格情報を保存します。If the attempts to connect to the application succeed, then select Save to save the admin credentials.

  11. [マッピング] セクションには、選択可能な 2 つの属性マッピングのセットがあります。片方はユーザー オブジェクト用であり、他方はグループ オブジェクト用です。In the Mappings section, there are two selectable sets of attribute mappings: one for user objects and one for group objects. Azure Active Directory からアプリに同期されている属性を確認するには、それぞれを選択します。Select each one to review the attributes that are synchronized from Azure Active Directory to your app. [Matching](照合) プロパティとして選択されている属性は、更新処理でアプリ内のユーザーとアカウントを照合するために使用されます。The attributes selected as Matching properties are used to match the users and groups in your app for update operations. すべての変更をコミットするには、 [保存] を選択します。Select Save to commit any changes.

    注意

    必要に応じて [グループ] マッピングを無効にすることで、グループ オブジェクトの同期を無効にできます。You can optionally disable syncing of group objects by disabling the "groups" mapping.

  12. [設定][スコープ] フィールドは、どのユーザーおよびグループが同期されるかを定義します。Under Settings, the Scope field defines which users and groups are synchronized. [割り当てられたユーザーとグループのみを同期する] (推奨) を選択すると、 [ユーザーとグループ] タブに割り当てられたユーザーとグループのみが同期されます。Select Sync only assigned users and groups (recommended) to only sync users and groups assigned in the Users and groups tab.

  13. 構成が完了したら、 [プロビジョニング状態][オン] に設定します。Once your configuration is complete, set the Provisioning Status to On.

  14. Azure AD のプロビジョニング サービスを開始するには、 [保存] を選択します。Select Save to start the Azure AD provisioning service.

  15. 割り当てられたユーザーとグループのみを同期する (推奨) 場合は、 [ユーザーとグループ] タブを選択し、同期するユーザーとグループを割り当てます。If syncing only assigned users and groups (recommended), be sure to select the Users and groups tab and assign the users or groups you want to sync.

初期サイクルが開始されたら、左側のパネルにある [監査ログ] を選択して進行状況を監視できます。これにより、プロビジョニング サービスによって実行されたすべてのアクションがアプリで表示されます。Once the initial cycle has started, you can select Audit logs in the left panel to monitor progress, which shows all actions done by the provisioning service on your app. Azure AD プロビジョニング ログの読み取りの詳細については、「自動ユーザー アカウント プロビジョニングについてのレポート」をご覧ください。For more information on how to read the Azure AD provisioning logs, see Reporting on automatic user account provisioning.

注意

初期サイクルは、サービスが実行されている限り約 40 分ごとに実行される以降の同期よりも、実行に時間がかかります。The initial cycle takes longer to perform than later syncs, which occur approximately every 40 minutes as long as the service is running.

Azure AD アプリケーション ギャラリーにアプリケーションを発行するには:To publish your application to the Azure AD application gallery:

複数のテナントによって使用されるアプリケーションを作成する場合は、Azure AD アプリケーション ギャラリーで使用できるようにすることができます。If you're building an application that will be used my more than one tenant, you can make it available in the Azure AD application gallery. これにより、組織でアプリケーションを見つけて、プロビジョニングを構成することが簡単になります。This will make it easy for organizations to discover the application and configure provisioning. 簡単に、Azure AD ギャラリーにアプリを発行し、他のユーザーがプロビジョニングできるようにすることができます。Publishing your app in the Azure AD gallery and making provisioning available to others is easy. 手順は、 こちらで確認してください。Check out the steps here.

Azure AD SCIM の実装についてUnderstanding the Azure AD SCIM implementation

お客様が SCIM 2.0 ユーザー管理 API がサポートされるアプリケーションを構築している場合、このセクションには、Azure AD SCIM クライアントの実装方法、SCIM プロトコル要求の処理と応答のモデル化方法が詳細に記載されています。If you're building an application that supports a SCIM 2.0 user management API, this section describes in detail how the Azure AD SCIM client is implemented, and how you should model your SCIM protocol request handling and responses. SCIM エンドポイントを実装した後は、前のセクションに説明されている手順に従ってテストすることができます。Once you've implemented your SCIM endpoint, you can test it by following the procedure described in the previous section.

SCIM 2.0 プロトコル仕様の中で、アプリケーションは次の要件を満たす必要があります。Within the SCIM 2.0 protocol specification, your application must meet these requirements:

  • SCIM プロトコルのセクション 3.3 に従って、ユーザー、グループ (オプション) の作成をサポートする。Supports creating users, and optionally also groups, as per section 3.3 of the SCIM protocol.
  • SCIM プロトコルのセクション 3.5.2 に従って、PATCH 要求によるユーザーまたはグループの変更をサポートする。Supports modifying users or groups with PATCH requests, as per section 3.5.2 of the SCIM protocol.
  • SCIM プロトコルのセクション 3.4.1 に従って、これまで作成したユーザーまたはグループの既知のリソースの取得をサポートする。Supports retrieving a known resource for a user or group created earlier, as per section 3.4.1 of the SCIM protocol.
  • SCIM プロトコルのセクション 3.4.2 に従って、ユーザーまたはグループのクエリをサポートする。Supports querying users or groups, as per section 3.4.2 of the SCIM protocol. 既定では、ユーザーの取得には id、ユーザーのクエリには usernameexternalid、グループのクエリには displayName が使用されます。By default, users are retrieved by their id and queried by their username and externalid, and groups are queried by displayName.
  • SCIM プロトコルのセクション 3.4.2 に従って、ID と管理者によるユーザーの照会をサポートする。Supports querying user by ID and by manager, as per section 3.4.2 of the SCIM protocol.
  • SCIM プロトコルのセクション 3.4.2 に従って、ID とメンバーによるグループの照会をサポートする。Supports querying groups by ID and by member, as per section 3.4.2 of the SCIM protocol.
  • アプリケーションに対する Azure AD の認証と承認のために、単一のベアラー トークンを受け入れる。Accepts a single bearer token for authentication and authorization of Azure AD to your application.

Azure AD との互換性を確保するために、SCIM エンドポイントの実装時は次の一般的なガイドラインに従ってください。Follow these general guidelines when implementing a SCIM endpoint to ensure compatibility with Azure AD:

  • id は、すべてのリソースの必須のプロパティです。id is a required property for all the resources. リソースを返すすべての応答において、メンバーが 0 の ListResponse を除き、各リソースにこのプロパティが含まれるようにする必要があります。Every response that returns a resource should ensure each resource has this property, except for ListResponse with zero members.
  • クエリ/フィルター要求への応答は常に ListResponse である必要があります。Response to a query/filter request should always be a ListResponse.
  • グループはオプションですが、SCIM 実装で PATCH 要求がサポートされている場合にのみ、サポートされます。Groups are optional, but only supported if the SCIM implementation supports PATCH requests.
  • PATCH 応答には、リソース全体を含める必要はありません。It isn't necessary to include the entire resource in the PATCH response.
  • Microsoft Azure AD では、次の演算子のみを使用します。Microsoft Azure AD only uses the following operators:
    • eq
    • and
  • https://tools.ietf.org/html/rfc7644#section-3.5.2 に定義されているように、特に PATCH op 操作値の場合、SCIM 内の構造要素に対して大文字と小文字を区別した一致を要求しないでください。Don't require a case-sensitive match on structural elements in SCIM, in particular PATCH op operation values, as defined in https://tools.ietf.org/html/rfc7644#section-3.5.2. Azure AD では、'op' の値が AddReplaceRemove として出力されます。Azure AD emits the values of 'op' as Add, Replace, and Remove.
  • Microsoft Azure AD では、エンドポイントと資格情報が有効であることを確認するため、ランダムなユーザーとグループをフェッチする要求を行います。Microsoft Azure AD makes requests to fetch a random user and group to ensure that the endpoint and the credentials are valid. Azure portal 内で、テスト接続フローの一部としても行われます。It's also done as a part of Test Connection flow in the Azure portal.
  • リソースのクエリが可能な属性は、Azure portal 内でアプリケーション上の照合属性として設定される必要があります。The attribute that the resources can be queried on should be set as a matching attribute on the application in the Azure portal. 詳細については、ユーザー プロビジョニング属性マッピングのカスタマイズに関するページを参照してください。For more information, see Customizing User Provisioning Attribute Mappings

ユーザーのプロビジョニングとプロビジョニング解除User provisioning and de-provisioning

次の図は、アプリケーションの ID ストア内にあるユーザーのライフサイクルを管理するために Azure Active Directory から SCIM サービスに送信されるメッセージを示しています。The following illustration shows the messages that Azure Active Directory sends to a SCIM service to manage the lifecycle of a user in your application's identity store.

ユーザーのプロビジョニングとプロビジョニング解除のシーケンスを示しますShows the user provisioning and de-provisioning sequence
"図 4:ユーザーのプロビジョニングとプロビジョニング解除のシーケンスFigure 4: User provisioning and de-provisioning sequence

グループのプロビジョニングとプロビジョニング解除Group provisioning and de-provisioning

グループのプロビジョニングとプロビジョニング解除はオプションです。Group provisioning and de-provisioning are optional. 実装され有効にされている場合、次の図は、アプリケーションの ID ストア内にあるグループのライフサイクルを管理するために Azure AD から SCIM サービスに送信されるメッセージを示しています。When implemented and enabled, the following illustration shows the messages that Azure AD sends to a SCIM service to manage the lifecycle of a group in your application's identity store. それらのメッセージは、次の 2 つの点でユーザーに関するメッセージと異なっています。Those messages differ from the messages about users in two ways:

  • グループを取得する要求では、要求に対する応答の中で提示されるリソースから、members 属性が除外されるように指定しています。Requests to retrieve groups specify that the members attribute is to be excluded from any resource provided in response to the request.
  • 参照属性に特定の値があるかどうかを判別する要求は、members 属性に関する要求になります。Requests to determine whether a reference attribute has a certain value are requests about the members attribute.

グループのプロビジョニングとプロビジョニング解除のシーケンスを示しますShows the group provisioning and de-provisioning sequence
図 5:グループのプロビジョニングとプロビジョニング解除のシーケンスFigure 5: Group provisioning and de-provisioning sequence

SCIM プロトコル要求と応答SCIM protocol requests and responses

このセクションでは、Azure AD SCIM クライアントによって出力される SCIM 要求の例と、想定される応答の例を示します。This section provides example SCIM requests emitted by the Azure AD SCIM client and example expected responses. 最良の結果を得るには、このような要求をこの形式で処理し、想定される応答を出力するよう、アプリをコーディングしてください。For best results, you should code your app to handle these requests in this format and emit the expected responses.

重要

Azure AD ユーザー プロビジョニング サービスが以下に示す操作を出力する方法とタイミングについては、「プロビジョニング中の動作」を参照してください。To understand how and when the Azure AD user provisioning service emits the operations described below, see What happens during user provisioning?.

ユーザー操作User Operations

  • ユーザーは userName または email[type eq "work"] 属性でクエリすることができます。Users can be queried by userName or email[type eq "work"] attributes.

[Create User]Create User

RequestRequest

POST /UsersPOST /Users

{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "active": true,
    "emails": [{
        "primary": true,
        "type": "work",
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com"
    }],
    "meta": {
        "resourceType": "User"
    },
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName"
    },
    "roles": []
}
ResponseResponse

HTTP/1.1 201 CreatedHTTP/1.1 201 Created

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "48af03ac28ad4fb88478",
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com",
        "type": "work",
        "primary": true
    }]
}

ユーザーの取得Get User

要求Request

GET /Users/5d48a0a8e9f04aa38008GET /Users/5d48a0a8e9f04aa38008

応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5d48a0a8e9f04aa38008",
    "externalId": "58342554-38d6-4ec8-948c-50044d0a33fd",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_feed3ace-693c-4e5a-82e2-694be1b39934",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_22370c1a-9012-42b2-bf64-86099c2a1c22@testuser.com",
        "type": "work",
        "primary": true
    }]
}

クエリによるユーザーの取得Get User by query

要求Request

GET /Users?filter=userName eq "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081"GET /Users?filter=userName eq "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081"

応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
        "id": "2441309d85324e7793ae",
        "externalId": "7fce0092-d52e-4f76-b727-3955bd72c939",
        "meta": {
            "resourceType": "User",
            "created": "2018-03-27T19:59:26.000Z",
            "lastModified": "2018-03-27T19:59:26.000Z"
            
        },
        "userName": "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081",
        "name": {
            "familyName": "familyName",
            "givenName": "givenName"
        },
        "active": true,
        "emails": [{
            "value": "Test_User_91b67701-697b-46de-b864-bd0bbe4f99c1@testuser.com",
            "type": "work",
            "primary": true
        }]
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

クエリによるユーザーの取得 - 0 件の結果Get User by query - Zero results

要求Request

GET /Users?filter=userName eq "non-existent user"GET /Users?filter=userName eq "non-existent user"

応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 0,
    "Resources": [],
    "startIndex": 1,
    "itemsPerPage": 20
}

ユーザーの更新 [複数値のプロパティ]Update User [Multi-valued properties]

要求Request

PATCH /Users/6764549bef60420686bc HTTP/1.1PATCH /Users/6764549bef60420686bc HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
            {
            "op": "Replace",
            "path": "emails[type eq \"work\"].value",
            "value": "updatedEmail@microsoft.com"
            },
            {
            "op": "Replace",
            "path": "name.familyName",
            "value": "updatedFamilyName"
            }
    ]
}
応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "6764549bef60420686bc",
    "externalId": "6c75de36-30fa-4d2d-a196-6bdcdb6b6539",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_fbb9dda4-fcde-4f98-a68b-6c5599e17c27",
    "name": {
        "formatted": "givenName updatedFamilyName",
        "familyName": "updatedFamilyName",
        "givenName": "givenName"
    },
    "active": true,
    "emails": [{
        "value": "updatedEmail@microsoft.com",
        "type": "work",
        "primary": true
    }]
}

ユーザーの更新 [単一値のプロパティ]Update User [Single-valued properties]

要求Request

PATCH /Users/5171a35d82074e068ce2 HTTP/1.1PATCH /Users/5171a35d82074e068ce2 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "userName",
        "value": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com"
    }]
}
応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5171a35d82074e068ce2",
    "externalId": "aa1eca08-7179-4eeb-a0be-a519f7e5cd1a",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "userName": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_49dc1090-aada-4657-8434-4995c25a00f7@testuser.com",
        "type": "work",
        "primary": true
    }]
}

ユーザーの削除Delete User

要求Request

DELETE /Users/5171a35d82074e068ce2 HTTP/1.1DELETE /Users/5171a35d82074e068ce2 HTTP/1.1

応答Response

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

グループ操作Group Operations

  • グループは、常に空のメンバーのリストで作成されます。Groups shall always be created with an empty members list.
  • グループは displayName 属性でクエリすることができます。Groups can be queried by the displayName attribute.
  • グループ PATCH 要求を更新すると、応答に HTTP 204 No Content が含まれることになります。Update to the group PATCH request should yield an HTTP 204 No Content in the response. 全メンバーのリストを含めて本文を返すことはお勧めできません。Returning a body with a list of all the members isn't advisable.
  • グループの全メンバーを返すことをサポートする必要はありません。It isn't necessary to support returning all the members of the group.

グループの作成Create Group

要求Request

POST /Groups HTTP/1.1POST /Groups HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group", "http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/2.0/Group"],
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "displayName": "displayName",
    "members": [],
    "meta": {
        "resourceType": "Group"
    }
}
応答Response

HTTP/1.1 201 CreatedHTTP/1.1 201 Created

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "927fa2c08dcb4a7fae9e",
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "displayName": "displayName",
    "members": []
}

グループの取得Get Group

要求Request

GET /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1GET /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1

応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "40734ae655284ad3abcc",
    "externalId": "60f1bb27-2e1e-402d-bcc4-ec999564a194",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "displayName": "displayName",
}

displayName でのグループの取得Get Group by displayName

要求Request

GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1

応答Response

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
        "id": "8c601452cc934a9ebef9",
        "externalId": "0db508eb-91e2-46e4-809c-30dcbda0c685",
        "meta": {
            "resourceType": "Group",
            "created": "2018-03-27T22:02:32.000Z",
            "lastModified": "2018-03-27T22:02:32.000Z",
            
        },
        "displayName": "displayName",
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

グループの更新 [非メンバー属性]Update Group [Non-member attributes]

要求Request

PATCH /Groups/fa2ce26709934589afc5 HTTP/1.1PATCH /Groups/fa2ce26709934589afc5 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "displayName",
        "value": "1879db59-3bdf-4490-ad68-ab880a269474updatedDisplayName"
    }]
}
応答Response

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

グループの更新 [メンバーの追加]Update Group [Add Members]

要求Request

PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Add",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
応答Response

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

グループの更新 [メンバーの削除]Update Group [Remove Members]

要求Request

PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Remove",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
応答Response

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

グループの削除Delete Group

要求Request

DELETE /Groups/cdb1ce18f65944079d37 HTTP/1.1DELETE /Groups/cdb1ce18f65944079d37 HTTP/1.1

応答Response

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

Microsoft CLI ライブラリを使用した SCIM エンドポイントの構築Building a SCIM endpoint using Microsoft CLI libraries

Azure Active Directory を接続して動作させる SCIM Web サービスを作成することにより、ほとんどすべてのアプリケーションまたは ID ストアの自動ユーザー プロビジョニングを実現することができます。By creating a SCIM web service that interfaces with Azure Active Directory, you can enable automatic user provisioning for virtually any application or identity store.

そのしくみは次のとおりです。Here’s how it works:

  1. Azure AD では Microsoft.SystemForCrossDomainIdentityManagement という共通言語基盤 (CLI) ライブラリが、以下のサンプル コードと共に提供されています。Azure AD provides a common language infrastructure (CLI) library named Microsoft.SystemForCrossDomainIdentityManagement, included with the code samples describe below. システム インテグレーターや開発者は、このライブラリを使用して、Azure AD を任意のアプリケーションの ID ストアに接続できる SCIM ベースの Web サービス エンドポイントを作成してデプロイできます。System integrators and developers can use this library to create and deploy a SCIM-based web service endpoint that can connect Azure AD to any application’s identity store.
  2. 標準化されたユーザー スキーマをアプリケーションで必要なユーザー スキーマやプロトコルに対応付けるためのマッピングが Web サービスに実装されます。Mappings are implemented in the web service to map the standardized user schema to the user schema and protocol required by the application.
  3. エンドポイント URL が、Azure AD のアプリケーション ギャラリーにカスタム アプリケーションの一部として登録されます。The endpoint URL is registered in Azure AD as part of a custom application in the application gallery.
  4. ユーザーとグループが、Azure AD 内でこのアプリケーションに割り当てられます。Users and groups are assigned to this application in Azure AD. 割り当ての際には、ターゲット アプリケーションと同期するためのキューに配置されます。Upon assignment, they're put into a queue to be synchronized to the target application. キューを処理する同期プロセスは、40 分ごとに実行されます。The synchronization process handling the queue runs every 40 minutes.

コード サンプルCode samples

このプロセスをわかりやすくするために、SCIM Web サービス エンドポイントを作成して自動プロビジョニングを例示するコード サンプルを用意しました。To make this process easier, code samples are provided, which create a SCIM web service endpoint and demonstrate automatic provisioning. サンプルは、ユーザーとグループを表すコンマ区切り値の行が含まれたファイルを保持するプロバイダーです。The sample is of a provider that maintains a file with rows of comma-separated values representing users and groups.

前提条件Prerequisites

使用の開始Getting started

Azure AD からのプロビジョニング要求を受信できる SCIM エンドポイントを実装する最も簡単な方法は、プロビジョニングするユーザーをコンマ区切り値 (CSV) ファイルに出力するコード サンプルをビルドしてデプロイすることです。The easiest way to implement a SCIM endpoint that can accept provisioning requests from Azure AD is to build and deploy the code sample that outputs the provisioned users to a comma-separated value (CSV) file.

サンプルの SCIM エンドポイントを作成するにはTo create a sample SCIM endpoint

  1. https://github.com/Azure/AzureAD-BYOA-Provisioning-Samples/tree/master で、コード サンプル パッケージをダウンロードします。Download the code sample package at https://github.com/Azure/AzureAD-BYOA-Provisioning-Samples/tree/master

  2. パッケージを解凍し、Windows コンピューターの C:\AzureAD-BYOA-Provisioning-Samples\ などの場所に配置します。Unzip the package and place it on your Windows machine at a location such as C:\AzureAD-BYOA-Provisioning-Samples.

  3. このフォルダーで、Visual Studio の FileProvisioning\Host\FileProvisioningService.csproj プロジェクトを起動します。In this folder, launch the FileProvisioning\Host\FileProvisioningService.csproj project in Visual Studio.

  4. [ツール] > [NuGet パッケージ マネージャー] > [パッケージ マネージャー コンソール] の順に選択し、FileProvisioningService プロジェクトに対して以下のコマンドを実行して、ソリューションの参照を解決します。Select Tools > NuGet Package Manager > Package Manager Console, and execute the following commands for the FileProvisioningService project to resolve the solution references:

     Update-Package -Reinstall
    
  5. FileProvisioningService プロジェクトをビルドします。Build the FileProvisioningService project.

  6. Windows のコマンド プロンプト アプリケーションを (管理者として) 起動し、cd コマンドを使用してディレクトリを \AzureAD-BYOA-Provisioning-Samples\FileProvisioning\Host\bin\Debug フォルダーに変更します。Launch the Command Prompt application in Windows (as an Administrator), and use the cd command to change the directory to your \AzureAD-BYOA-Provisioning-Samples\FileProvisioning\Host\bin\Debug folder.

  7. 次のコマンドを実行します。その際、<ip-address> を Windows コンピューターの IP アドレスまたはドメイン名に置き換えます。Run the following command, replacing <ip-address> with the IP address or domain name of the Windows machine:

     FileSvc.exe http://<ip-address>:9000 TargetFile.csv
    
  8. Windows の [Windows の設定] > [ネットワークとインターネット] 設定で、 [Windows ファイアウォール] > [詳細設定] の順に選択し、ポート 9000 への入力方向のアクセスを許可する [受信規則] を作成します。In Windows under Windows Settings > Network & Internet Settings, select the Windows Firewall > Advanced Settings, and create an Inbound Rule that allows inbound access to port 9000.

  9. Windows コンピューターがルーターの内側にある場合は、インターネットに公開されているポート 9000 と Windows コンピューター上のポート 9000 の間でネットワーク アクセス変換を実行するようにルーターを構成する必要があります。If the Windows machine is behind a router, the router needs to be configured to run Network Access Translation between its port 9000 that is exposed to the internet, and port 9000 on the Windows machine. この構成は、Azure AD からクラウド上にあるこのエンドポイントにアクセスするために必要です。This configuration is required for Azure AD to access this endpoint in the cloud.

Azure AD にサンプルの SCIM エンドポイントを登録するにはTo register the sample SCIM endpoint in Azure AD

  1. Azure Active Directory ポータルにサインインします。Sign in to the Azure Active Directory portal.

  2. 左側のウィンドウで、 [エンタープライズ アプリケーション] を選択します。Select Enterprise applications from the left pane. ギャラリーから追加されたアプリを含む、構成済みのすべてのアプリの一覧が表示されます。A list of all configured apps is shown, including apps that were added from the gallery.

  3. [+ 新しいアプリケーション] > [すべて] > [ギャラリー以外のアプリケーション] の順に選択します。Select + New application > All > Non-gallery application.

  4. アプリケーションの名前を入力し、 [追加] を選択してアプリ オブジェクトを作成します。Enter a name for your application, and select Add to create an app object. 作成されるアプリケーション オブジェクトは、単なる SCIM エンドポイントではなく、シングル サインオンのプロビジョニングと実装の対象であるアプリケーションを表しています。The application object created is intended to represent the target app you would be provisioning to and implementing single sign-on for, and not just the SCIM endpoint.

  5. アプリの管理画面で、左側のパネルにある [プロビジョニング] を選択します。In the app management screen, select Provisioning in the left panel.

  6. [プロビジョニング モード] メニューの [自動] を選択します。In the Provisioning Mode menu, select Automatic.

  7. [テナント URL] フィールドに、アプリケーションの SCIM エンドポイントの URL を入力します。In the Tenant URL field, enter the URL of the application's SCIM endpoint. 例: https://api.contoso.com/scim/Example: https://api.contoso.com/scim/

  8. SCIM エンドポイントで、Azure AD 以外の発行者からの OAuth ベアラー トークンを必要とする場合は、必要な OAuth ベアラー トークンをオプションの [シークレット トークン] フィールドにコピーします。If the SCIM endpoint requires an OAuth bearer token from an issuer other than Azure AD, then copy the required OAuth bearer token into the optional Secret Token field. このフィールドを空白のままにすると、Azure AD では各要求に Azure AD を発行元とする OAuth ベアラー トークンを含めます。If this field is left blank, Azure AD includes an OAuth bearer token issued from Azure AD with each request. ID プロバイダーとして Azure AD を使用するアプリは、この Azure AD によって発行されたトークンを検証できます。Apps that use Azure AD as an identity provider can validate this Azure AD-issued token.

  9. [テスト接続] を選択して、Azure Active Directory による SCIM エンドポイントへの接続を試みます。Select Test Connection to have Azure Active Directory attempt to connect to the SCIM endpoint. 試行に失敗した場合は、エラー情報が表示されます。If the attempt fails, error information is displayed.

    注意

    テスト接続では、Azure AD 構成で照合プロパティとして選択されたランダムな GUID を使用して、存在しないユーザー用の SCIM エンドポイントのクエリが実行されます。Test Connection queries the SCIM endpoint for a user that doesn't exist, using a random GUID as the matching property selected in the Azure AD configuration. 想定される適切な応答は、HTTP 200 OK と空の SCIM ListResponse メッセージです。The expected correct response is HTTP 200 OK with an empty SCIM ListResponse message

  10. アプリケーションへの接続の試行に成功した場合は、 [保存] を選択して管理者資格情報を保存します。If the attempts to connect to the application succeed, then select Save to save the admin credentials.

  11. [マッピング] セクションには、選択可能な 2 つの属性マッピングのセットがあります。片方はユーザー オブジェクト用であり、他方はグループ オブジェクト用です。In the Mappings section, there are two selectable sets of attribute mappings: one for user objects and one for group objects. Azure Active Directory からアプリに同期されている属性を確認するには、それぞれを選択します。Select each one to review the attributes that are synchronized from Azure Active Directory to your app. [Matching](照合) プロパティとして選択されている属性は、更新処理でアプリ内のユーザーとアカウントを照合するために使用されます。The attributes selected as Matching properties are used to match the users and groups in your app for update operations. すべての変更をコミットするには、 [保存] を選択します。Select Save to commit any changes.

  12. [設定][スコープ] フィールドは、同期するユーザーまたはグループを定義します。Under Settings, the Scope field defines which users and or groups are synchronized. [割り当てられたユーザーとグループのみを同期する] (推奨) を選択すると、 [ユーザーとグループ] タブに割り当てられたユーザーとグループのみが同期されます。Select "Sync only assigned users and groups (recommended) to only sync users and groups assigned in the Users and groups tab.

  13. 構成が完了したら、 [プロビジョニング状態][オン] に設定します。Once your configuration is complete, set the Provisioning Status to On.

  14. Azure AD のプロビジョニング サービスを開始するには、 [保存] を選択します。Select Save to start the Azure AD provisioning service.

  15. 割り当てられたユーザーとグループのみを同期する (推奨) 場合は、 [ユーザーとグループ] タブを選択し、同期するユーザーとグループを割り当てます。If syncing only assigned users and groups (recommended), be sure to select the Users and groups tab and assign the users or groups you want to sync.

初期サイクルが開始されたら、左側のパネルにある [監査ログ] を選択して進行状況を監視できます。これにより、プロビジョニング サービスによって実行されたすべてのアクションがアプリで表示されます。Once the initial cycle has started, you can select Audit logs in the left panel to monitor progress, which shows all actions done by the provisioning service on your app. Azure AD プロビジョニング ログの読み取りの詳細については、「自動ユーザー アカウント プロビジョニングについてのレポート」をご覧ください。For more information on how to read the Azure AD provisioning logs, see Reporting on automatic user account provisioning.

サンプルを確認する最後の手順として、Windows コンピューターの \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\bin\Debug フォルダーにある TargetFile.csv ファイルを開きます。The final step in verifying the sample is to open the TargetFile.csv file in the \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\bin\Debug folder on your Windows machine. プロビジョニング プロセスが完了すると、割り当てられ、プロビジョニングされたすべてのユーザーとグループに関する詳細がこのファイルに表示されます。Once the provisioning process is run, this file shows the details of all assigned and provisioned users and groups.

開発ライブラリDevelopment libraries

SCIM 仕様に準拠する独自の Web サービスを開発するにあたっては、開発プロセスの時間を短縮できるように、まずは Microsoft が提供する以下のライブラリについて理解してください。To develop your own web service that conforms to the SCIM specification, first familiarize yourself with the following libraries provided by Microsoft to help accelerate the development process:

  • 共通言語基盤 (CLI) ライブラリは、C# など、この基盤をベースにした言語で使用できます。Common Language Infrastructure (CLI) libraries are offered for use with languages based on that infrastructure, such as C#. これらのライブラリの 1 つ Microsoft.SystemForCrossDomainIdentityManagement.Service では、次の図に示すように、Microsoft.SystemForCrossDomainIdentityManagement.IProvider インターフェイスが宣言されています。One of those libraries, Microsoft.SystemForCrossDomainIdentityManagement.Service, declares an interface, Microsoft.SystemForCrossDomainIdentityManagement.IProvider, shown in the following illustration. 開発者は、このライブラリを使用して、プロバイダーと総称されるクラスにこのインターフェイスを実装できます。A developer using the libraries would implement that interface with a class that may be referred to, generically, as a provider. 開発者は、ライブラリを使用して、SCIM 仕様に準拠する Web サービスをデプロイできます。The libraries let the developer deploy a web service that conforms to the SCIM specification. Web サービスは、インターネット インフォメーション サービス内でホストすることも、実行可能な CLI アセンブリ内でホストすることもできます。The web service can be either hosted within Internet Information Services, or any executable CLI assembly. 要求は、プロバイダーのメソッドの呼び出しに変換されます。開発者は、これを任意の ID ストアに作用するようにプログラムできます。Request is translated into calls to the provider’s methods, which would be programmed by the developer to operate on some identity store.

    内訳:プロバイダーのメソッドへの呼び出しに変換された要求

  • Express ルート ハンドラーは、node.js Web サービスに対する (SCIM 仕様で定義された) 呼び出しを表す node.js 要求オブジェクトの解析に使用できます。Express route handlers are available for parsing node.js request objects representing calls (as defined by the SCIM specification), made to a node.js web service.

カスタム SCIM エンドポイントの構築Building a custom SCIM endpoint

開発者は CLI ライブラリを使用して、CLI の実行可能アセンブリ内、またはインターネット インフォメーション サービス内でサービスをホストできます。Developers using the CLI libraries can host their services within any executable CLI assembly, or within Internet Information Services. アドレス http://localhost:9000: にある実行可能アセンブリ内にサービスをホストするためのサンプル コードを次に示します。Here is sample code for hosting a service within an executable assembly, at the address http://localhost:9000:

 private static void Main(string[] arguments)
 {
 // Microsoft.SystemForCrossDomainIdentityManagement.IMonitor, 
 // Microsoft.SystemForCrossDomainIdentityManagement.IProvider and 
 // Microsoft.SystemForCrossDomainIdentityManagement.Service are all defined in 
 // Microsoft.SystemForCrossDomainIdentityManagement.Service.dll.  

 Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitor = 
   new DevelopersMonitor();
 Microsoft.SystemForCrossDomainIdentityManagement.IProvider provider = 
   new DevelopersProvider(arguments[1]);
 Microsoft.SystemForCrossDomainIdentityManagement.Service webService = null;
 try
 {
     webService = new WebService(monitor, provider);
     webService.Start("http://localhost:9000");

     Console.ReadKey(true);
 }
 finally
 {
     if (webService != null)
     {
         webService.Dispose();
         webService = null;
     }
 }
 }

 public class WebService : Microsoft.SystemForCrossDomainIdentityManagement.Service
 {
 private Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitor;
 private Microsoft.SystemForCrossDomainIdentityManagement.IProvider provider;

 public WebService(
   Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitoringBehavior, 
   Microsoft.SystemForCrossDomainIdentityManagement.IProvider providerBehavior)
 {
     this.monitor = monitoringBehavior;
     this.provider = providerBehavior;
 }

 public override IMonitor MonitoringBehavior
 {
     get
     {
         return this.monitor;
     }

     set
     {
         this.monitor = value;
     }
 }

 public override IProvider ProviderBehavior
 {
     get
     {
         return this.provider;
     }

     set
     {
         this.provider = value;
     }
 }
 }

このサービスには、HTTP アドレスと、ルート証明機関が次のいずれかの名前であるサーバー認証証明書が設定されている必要があります。This service must have an HTTP address and server authentication certificate of which the root certification authority is one of the following names:

  • CNNICCNNIC
  • ComodoComodo
  • CyberTrustCyberTrust
  • DigiCertDigiCert
  • GeoTrustGeoTrust
  • GlobalSignGlobalSign
  • Go DaddyGo Daddy
  • VeriSignVeriSign
  • WoSignWoSign

サーバー認証証明書は、ネットワーク シェル ユーティリティを使用して Windows ホスト上のポートにバインドできます。A server authentication certificate can be bound to a port on a Windows host using the network shell utility:

netsh http add sslcert ipport=0.0.0.0:443 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}  

ここで、certhash 引数に指定されている値は証明書の拇印で、appid 引数に指定されている値は任意のグローバル一意識別子です。Here, the value provided for the certhash argument is the thumbprint of the certificate, while the value provided for the appid argument is an arbitrary globally unique identifier.

インターネット インフォメーション サービス内でサービスをホストする場合は、アセンブリの既定の名前空間に、Startup という名前のクラスを使用して、CLI コード ライブラリ アセンブリをビルドします。To host the service within Internet Information Services, a developer would build a CLI code library assembly with a class named Startup in the default namespace of the assembly. 以下に示すのは、このクラスのサンプルです。Here is a sample of such a class:

 public class Startup
 {
 // Microsoft.SystemForCrossDomainIdentityManagement.IWebApplicationStarter, 
 // Microsoft.SystemForCrossDomainIdentityManagement.IMonitor and  
 // Microsoft.SystemForCrossDomainIdentityManagement.Service are all defined in 
 // Microsoft.SystemForCrossDomainIdentityManagement.Service.dll.  

 Microsoft.SystemForCrossDomainIdentityManagement.IWebApplicationStarter starter;

 public Startup()
 {
     Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitor = 
       new DevelopersMonitor();
     Microsoft.SystemForCrossDomainIdentityManagement.IProvider provider = 
       new DevelopersProvider();
     this.starter = 
       new Microsoft.SystemForCrossDomainIdentityManagement.WebApplicationStarter(
         provider, 
         monitor);
 }

 public void Configuration(
   Owin.IAppBuilder builder) // Defined in Owin.dll.  
 {
     this.starter.ConfigureApplication(builder);
 }
 }

エンドポイント認証の処理Handling endpoint authentication

Azure Active Directory からの要求には、OAuth 2.0 のベアラー トークンが含まれます。Requests from Azure Active Directory include an OAuth 2.0 bearer token. 要求を受信するサービスでは、Azure Active Directory の Graph Web サービスにアクセスするために、発行者が本来の Azure Active Directory テナントに対応する Azure Active Directory であることを認証する必要があります。Any service receiving the request should authenticate the issuer as being Azure Active Directory for the expected Azure Active Directory tenant, for access to the Azure Active Directory Graph web service. トークンでは、発行者は、"iss":"https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/ " のような iss 要求によって識別されます。In the token, the issuer is identified by an iss claim, like "iss":"https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/". この例では、要求値のベース アドレスである https://sts.windows.net では発行者である Azure Active Directory を識別し、相対アドレス セグメントである cbb1a5ac-f33b-45fa-9bf5-f37db0fed422 は、トークンの発行対象となった Azure Active Directory テナントの一意識別子になっています。In this example, the base address of the claim value, https://sts.windows.net, identifies Azure Active Directory as the issuer, while the relative address segment, cbb1a5ac-f33b-45fa-9bf5-f37db0fed422, is a unique identifier of the Azure Active Directory tenant for which the token was issued. トークンの対象は、ギャラリー内のアプリのアプリケーション テンプレート ID になります。The audience for the token will be the application template ID for the app in the gallery. すべてのカスタム アプリのアプリケーション テンプレート ID は 8adf8e6e-67b2-4cf2-a259-e3dc5476c621 です。The application template ID for all custom apps is 8adf8e6e-67b2-4cf2-a259-e3dc5476c621. ギャラリー内の各アプリに使用されるアプリケーション テンプレート ID は一様ではありません。The application template ID for each app in the gallery varies. ギャラリー アプリケーションのアプリケーション テンプレート ID に関する質問は、ProvisioningFeedback@microsoft.com にお問い合わせください。Please contact ProvisioningFeedback@microsoft.com for questions on the application template ID for a gallery application. 単一のテナントに登録されている各アプリケーションは、同じ iss 要求を SCIM 要求と共に受信する場合があります。Each of the applications registered in a single tenant may receive the same iss claim with SCIM requests.

Microsoft が提供する CLI ライブラリを使用して SCIM サービスを作成する場合、開発者は、次の手順に従って、Microsoft.Owin.Security.ActiveDirectory パッケージを使用して、Azure Active Directory からの要求を認証できます。Developers using the CLI libraries provided by Microsoft for building a SCIM service can authenticate requests from Azure Active Directory using the Microsoft.Owin.Security.ActiveDirectory package by following these steps:

  1. プロバイダーに、Microsoft.SystemForCrossDomainIdentityManagement.IProvider.StartupBehavior プロパティを実装します。そのために、サービスが開始されるたびに呼び出されるメソッドを返すように設定します。In a provider, implement the Microsoft.SystemForCrossDomainIdentityManagement.IProvider.StartupBehavior property by having it return a method to be called whenever the service is started:

      public override Action<Owin.IAppBuilder, System.Web.Http.HttpConfiguration.HttpConfiguration> StartupBehavior
      {
        get
        {
          return this.OnServiceStartup;
        }
      }
    
      private void OnServiceStartup(
        Owin.IAppBuilder applicationBuilder,  // Defined in Owin.dll.  
        System.Web.Http.HttpConfiguration configuration)  // Defined in System.Web.Http.dll.  
      {
      }
    
  2. そのメソッドに次のコードを追加して、Azure AD の Graph Web サービスにアクセスするために、指定のテナントに対して Azure Active Directory から発行されたトークンを伝送しているとして、サービスのエンドポイントに対するすべての要求を認証します。Add the following code to that method to have any request to any of the service’s endpoints authenticated as bearing a token issued by Azure Active Directory for a specified tenant, for access to the Azure AD Graph web service:

      private void OnServiceStartup(
        Owin.IAppBuilder applicationBuilder IAppBuilder applicationBuilder, 
        System.Web.Http.HttpConfiguration HttpConfiguration configuration)
      {
        // IFilter is defined in System.Web.Http.dll.  
        System.Web.Http.Filters.IFilter authorizationFilter = 
          new System.Web.Http.AuthorizeAttribute(); // Defined in System.Web.Http.dll.configuration.Filters.Add(authorizationFilter);
    
        // SystemIdentityModel.Tokens.TokenValidationParameters is defined in    
        // System.IdentityModel.Token.Jwt.dll.
        SystemIdentityModel.Tokens.TokenValidationParameters tokenValidationParameters =     
          new TokenValidationParameters()
          {
            ValidAudience = "8adf8e6e-67b2-4cf2-a259-e3dc5476c621"
          };
    
        // WindowsAzureActiveDirectoryBearerAuthenticationOptions is defined in 
        // Microsoft.Owin.Security.ActiveDirectory.dll
        Microsoft.Owin.Security.ActiveDirectory.
        WindowsAzureActiveDirectoryBearerAuthenticationOptions authenticationOptions =
          new WindowsAzureActiveDirectoryBearerAuthenticationOptions()    {
          TokenValidationParameters = tokenValidationParameters,
          Tenant = "03F9FCBC-EA7B-46C2-8466-F81917F3C15E" // Substitute the appropriate tenant’s 
                                                        // identifier for this one.  
        };
    
        applicationBuilder.UseWindowsAzureActiveDirectoryBearerAuthentication(authenticationOptions);
      }
    

ユーザーのプロビジョニングとプロビジョニング解除の処理Handling provisioning and deprovisioning of users

  1. Azure Active Directory は、Azure AD 内のユーザーの mailNickname 属性値に一致する externalId 属性値を持つユーザーをサービスに照会します。Azure Active Directory queries the service for a user with an externalId attribute value matching the mailNickname attribute value of a user in Azure AD. クエリは次の例のようなハイパーテキスト転送プロトコル (HTTP) 要求として表現されます。jyoung は Azure Active Directory 内のユーザーの mailNickname 例です。The query is expressed as a Hypertext Transfer Protocol (HTTP) request such as this example, wherein jyoung is a sample of a mailNickname of a user in Azure Active Directory.

    注意

    これは一例です。This is an example only. すべてのユーザーに mailNickname 属性があるわけではありません。また、ユーザーが持つ値はディレクトリ内で一意ではない場合もあります。Not all users will have a mailNickname attribute, and the value a user has may not be unique in the directory. また、照合に使用される属性 (この場合は externalId) は、Azure AD 属性マッピングで構成可能です。Also, the attribute used for matching (which in this case is externalId) is configurable in the Azure AD attribute mappings.

     GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
     Authorization: Bearer ...
    

    サービスの作成時に SCIM サービスの実装用に Microsoft が提供する CLI ライブラリを使用した場合、要求はサービスのプロバイダーの Query メソッドの呼び出しに変換されます。If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. このメソッドのシグネチャを次に示します。Here is the signature of that method:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in 
     // Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
     // Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters is defined in 
     // Microsoft.SystemForCrossDomainIdentityManagement.Protocol.  
    
     System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource[]> Query(
       Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters parameters, 
       string correlationIdentifier);
    

    次に示すのは、Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters インターフェイスの定義です。Here is the definition of the Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters interface:

     public interface IQueryParameters: 
       Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
     {
         System.Collections.Generic.IReadOnlyCollection <Microsoft.SystemForCrossDomainIdentityManagement.IFilter> AlternateFilters 
         { get; }
     }
    
     public interface Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
     {
       system.Collections.Generic.IReadOnlyCollection<string> ExcludedAttributePaths 
       { get; }
       System.Collections.Generic.IReadOnlyCollection<string> RequestedAttributePaths 
       { get; }
       string SchemaIdentifier 
       { get; }
     }
    
      GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
      Authorization: Bearer ...
    

    サービスの作成時に SCIM サービスの実装用に Microsoft が提供する共通言語基盤ライブラリを使用した場合、要求はサービスのプロバイダーの Query メソッドの呼び出しに変換されます。If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. このメソッドのシグネチャを次に示します。Here is the signature of that method:

      // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
      // Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in 
      // Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
      // Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters is defined in 
      // Microsoft.SystemForCrossDomainIdentityManagement.Protocol.  
    
      System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource[]>  Query(
        Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters parameters, 
        string correlationIdentifier);
    

    次に示すのは、Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters インターフェイスの定義です。Here is the definition of the Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters interface:

      public interface IQueryParameters: 
        Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
      {
          System.Collections.Generic.IReadOnlyCollection  <Microsoft.SystemForCrossDomainIdentityManagement.IFilter> AlternateFilters 
          { get; }
      }
    
      public interface Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
      {
        system.Collections.Generic.IReadOnlyCollection<string> ExcludedAttributePaths 
        { get; }
        System.Collections.Generic.IReadOnlyCollection<string> RequestedAttributePaths 
        { get; }
        string SchemaIdentifier 
        { get; }
      }
    
      public interface Microsoft.SystemForCrossDomainIdentityManagement.IFilter
      {
          Microsoft.SystemForCrossDomainIdentityManagement.IFilter AdditionalFilter 
            { get; set; }
          string AttributePath 
            { get; } 
          Microsoft.SystemForCrossDomainIdentityManagement.ComparisonOperator FilterOperator 
            { get; }
          string ComparisonValue 
            { get; }
      }
    
      public enum Microsoft.SystemForCrossDomainIdentityManagement.ComparisonOperator
      {
          Equals
      }
    

    externalId 属性に特定の値を持つユーザーを照会する次の例では、Query メソッドに渡される引数の値は次のようになります。In the following sample of a query for a user with a given value for the externalId attribute, values of the arguments passed to the Query method are:

    • parameters.AlternateFilters.Count:1parameters.AlternateFilters.Count: 1
    • parameters.AlternateFilters.ElementAt(0).AttributePath: "externalId"parameters.AlternateFilters.ElementAt(0).AttributePath: "externalId"
    • parameters.AlternateFilters.ElementAt(0).ComparisonOperator:ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(0).ComparisonOperator: ComparisonOperator.Equals
    • parameters.AlternateFilter.ElementAt(0).ComparisonValue: "jyoung"parameters.AlternateFilter.ElementAt(0).ComparisonValue: "jyoung"
    • correlationIdentifier:System.Net.Http.HttpRequestMessage.GetOwinEnvironment["owin.RequestId"]correlationIdentifier: System.Net.Http.HttpRequestMessage.GetOwinEnvironment["owin.RequestId"]
  2. ユーザーの mailNickname 属性値に一致する externalId 属性値を持つユーザーを Web サービスに照会したときに、応答でユーザーが返されなかった場合、Azure Active Directory は、Azure Active Directory 内のユーザーに対応するユーザーをプロビジョニングするようにサービスに要求します。If the response to a query to the web service for a user with an externalId attribute value that matches the mailNickname attribute value of a user doesn't return any users, then Azure Active Directory requests that the service provision a user corresponding to the one in Azure Active Directory. このような要求の例を次に示します。Here is an example of such a request:

     POST https://.../scim/Users HTTP/1.1
     Authorization: Bearer ...
     Content-type: application/scim+json
     {
       "schemas":
       [
         "urn:ietf:params:scim:schemas:core:2.0:User",
         "urn:ietf:params:scim:schemas:extension:enterprise:2.0User"],
       "externalId":"jyoung",
       "userName":"jyoung",
       "active":true,
       "addresses":null,
       "displayName":"Joy Young",
       "emails": [
         {
           "type":"work",
           "value":"jyoung@Contoso.com",
           "primary":true}],
       "meta": {
         "resourceType":"User"},
        "name":{
         "familyName":"Young",
         "givenName":"Joy"},
       "phoneNumbers":null,
       "preferredLanguage":null,
       "title":null,
       "department":null,
       "manager":null}
    

    その要求は、SCIM サービスを実装するために Microsoft が提供する CLI ライブラリによって、サービスのプロバイダーの Create メソッドの呼び出しに変換されます。The CLI libraries provided by Microsoft for implementing SCIM services would translate that request into a call to the Create method of the service’s provider. Create メソッドには、次のようなシグネチャがあります。The Create method has this signature:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in 
     // Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
    
     System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource> Create(
       Microsoft.SystemForCrossDomainIdentityManagement.Resource resource, 
       string correlationIdentifier);
    

    ユーザーをプロビジョニングする要求では、resource 引数の値は、Microsoft.SystemForCrossDomainIdentityManagement.In a request to provision a user, the value of the resource argument is an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Core2EnterpriseUser クラスのインスタンスになります。これは Microsoft.SystemForCrossDomainIdentityManagement.Schemas ライブラリに定義されています。Core2EnterpriseUser class, defined in the Microsoft.SystemForCrossDomainIdentityManagement.Schemas library. ユーザーをプロビジョニングする要求が成功すると、メソッドの実装は、Microsoft.SystemForCrossDomainIdentityManagement.If the request to provision the user succeeds, then the implementation of the method is expected to return an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Core2EnterpriseUser クラスのインスタンスを返し、Identifier プロパティの値に新たにプロビジョニングされたユーザーの一意識別子を設定すると想定されています。Core2EnterpriseUser class, with the value of the Identifier property set to the unique identifier of the newly provisioned user.

  3. SCIM によってアクセスされる ID ストアに存在することがわかっているユーザーを更新するために、Azure Active Directory は、次のような要求を使用して、そのユーザーの現在の状態をサービスに要求して処理を続行します。To update a user known to exist in an identity store fronted by an SCIM, Azure Active Directory proceeds by requesting the current state of that user from the service with a request such as:

     GET ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
     Authorization: Bearer ...
    

    SCIM サービスを実装するために Microsoft が提供する CLI ライブラリを使用して作成されたサービスで、要求はサービスのプロバイダーの Retrieve メソッドの呼び出しに変換されます。In a service built using the CLI libraries provided by Microsoft for implementing SCIM services, the request is translated into a call to the Retrieve method of the service’s provider. Retrieve メソッドのシグネチャを次に示します。Here is the signature of the Retrieve method:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.Resource and 
     // Microsoft.SystemForCrossDomainIdentityManagement.IResourceRetrievalParameters 
     // are defined in Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
     System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource> 
        Retrieve(
          Microsoft.SystemForCrossDomainIdentityManagement.IResourceRetrievalParameters 
            parameters, 
            string correlationIdentifier);
    
     public interface 
       Microsoft.SystemForCrossDomainIdentityManagement.IResourceRetrievalParameters:   
         IRetrievalParameters
         {
           Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier 
             ResourceIdentifier 
               { get; }
     }
     public interface Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier
     {
         string Identifier 
           { get; set; }
         string Microsoft.SystemForCrossDomainIdentityManagement.SchemaIdentifier 
           { get; set; }
     }
    

    ユーザーの現在の状態を取得する要求の例では、parameters 引数の値として指定されたオブジェクトのプロパティ値は次のようになります。In the example of a request to retrieve the current state of a user, the values of the properties of the object provided as the value of the parameters argument are as follows:

    • Identifier:"54D382A4-2050-4C03-94D1-E769F1D15682"Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  4. 参照属性を更新する場合、Azure Active Directory は、サービスによってアクセスされる ID ストア内の参照属性の現在の値が Azure Active Directory 内のその属性の値と既に一致しているかどうかを判別するために、サービスにクエリを実行します。If a reference attribute is to be updated, then Azure Active Directory queries the service to determine whether the current value of the reference attribute in the identity store fronted by the service already matches the value of that attribute in Azure Active Directory. ユーザーの場合、この方法で現在の値を照会する属性は、manager 属性のみです。For users, the only attribute of which the current value is queried in this way is the manager attribute. 特定のユーザー オブジェクトの manager 属性に特定の値があるかどうかを判別する要求の例を次に示します。Here is an example of a request to determine whether the manager attribute of a particular user object currently has a certain value:

    サービスの作成時に SCIM サービスの実装用に Microsoft が提供する CLI ライブラリを使用した場合、要求はサービスのプロバイダーの Query メソッドの呼び出しに変換されます。If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. parameters 引数の値として指定されたオブジェクトのプロパティ値は次のようになります。The value of the properties of the object provided as the value of the parameters argument are as follows:

    • parameters.AlternateFilters.Count:2parameters.AlternateFilters.Count: 2
    • parameters.AlternateFilters.ElementAt(x).AttributePath:"ID"parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"
    • parameters.AlternateFilters.ElementAt(x).ComparisonOperator:ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equals
    • parameters.AlternateFilter.ElementAt(x).ComparisonValue:"54D382A4-2050-4C03-94D1-E769F1D15682"parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"
    • parameters.AlternateFilters.ElementAt(y).ComparisonOperator:ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equals
    • parameters.AlternateFilter.ElementAt(y).ComparisonValue:"2819c223-7f76-453a-919d-413861904646"parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"
    • parameters.RequestedAttributePaths.ElementAt(0):"ID"parameters.RequestedAttributePaths.ElementAt(0): "ID"
    • parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

    ここでは、filter クエリ パラメーターの式の順序に応じて、インデックス x の値が 0、インデックス y の値が 1 になるか、または x の値が 1、y の値が 0 になります。Here, the value of the index x can be 0 and the value of the index y can be 1, or the value of x can be 1 and the value of y can be 0, depending on the order of the expressions of the filter query parameter.

  5. Azure Active Directory から SCIM サービスに対するユーザーを更新する要求の例を次に示します。Here is an example of a request from Azure Active Directory to an SCIM service to update a user:

     PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
     Authorization: Bearer ...
     Content-type: application/scim+json
     {
       "schemas": 
       [
         "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
       "Operations":
       [
         {
           "op":"Add",
           "path":"manager",
           "value":
             [
               {
                 "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
                 "value":"2819c223-7f76-453a-919d-413861904646"}]}]}
    

    その要求は、SCIM サービスを実装するための Microsoft CLI ライブラリによって、サービスのプロバイダーの Update メソッドの呼び出しに変換されます。The Microsoft CLI libraries for implementing SCIM services would translate the request into a call to the Update method of the service’s provider. Update メソッドのシグネチャを次に示します。Here is the signature of the Update method:

     // System.Threading.Tasks.Tasks and 
     // System.Collections.Generic.IReadOnlyCollection<T>
     // are defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.IPatch, 
     // Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase, 
     // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
     // Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation, 
     // Microsoft.SystemForCrossDomainIdentityManagement.OperationName, 
     // Microsoft.SystemForCrossDomainIdentityManagement.IPath and 
     // Microsoft.SystemForCrossDomainIdentityManagement.OperationValue 
     // are all defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
    
     System.Threading.Tasks.Task Update(
       Microsoft.SystemForCrossDomainIdentityManagement.IPatch patch, 
       string correlationIdentifier);
    
     public interface Microsoft.SystemForCrossDomainIdentityManagement.IPatch
     {
     Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase 
       PatchRequest 
         { get; set; }
     Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier 
       ResourceIdentifier 
         { get; set; }        
     }
    
     public class PatchRequest2: 
       Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase
     {
     public System.Collections.Generic.IReadOnlyCollection
       <Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation> 
         Operations
         { get;}
    

    サービスの作成時に SCIM サービスの実装用に Microsoft が提供する共通言語基盤ライブラリを使用した場合、要求はサービスのプロバイダーの Query メソッドの呼び出しに変換されます。If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. parameters 引数の値として指定されたオブジェクトのプロパティ値は次のようになります。The value of the properties of the object provided as the value of the parameters argument are as follows:

  • parameters.AlternateFilters.Count:2parameters.AlternateFilters.Count: 2

  • parameters.AlternateFilters.ElementAt(x).AttributePath:"ID"parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"

  • parameters.AlternateFilters.ElementAt(x).ComparisonOperator:ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equals

  • parameters.AlternateFilter.ElementAt(x).ComparisonValue:"54D382A4-2050-4C03-94D1-E769F1D15682"parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"

  • parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"

  • parameters.AlternateFilters.ElementAt(y).ComparisonOperator:ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equals

  • parameters.AlternateFilter.ElementAt(y).ComparisonValue:"2819c223-7f76-453a-919d-413861904646"parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"

  • parameters.RequestedAttributePaths.ElementAt(0):"ID"parameters.RequestedAttributePaths.ElementAt(0): "ID"

  • parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

    ここでは、filter クエリ パラメーターの式の順序に応じて、インデックス x の値が 0、インデックス y の値が 1 になるか、または x の値が 1、y の値が 0 になります。Here, the value of the index x can be 0 and the value of the index y can be 1, or the value of x can be 1 and the value of y can be 0, depending on the order of the expressions of the filter query parameter.

  1. Azure Active Directory から SCIM サービスに対するユーザーを更新する要求の例を次に示します。Here is an example of a request from Azure Active Directory to an SCIM service to update a user:

      PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
      Authorization: Bearer ...
      Content-type: application/scim+json
      {
        "schemas": 
        [
          "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations":
        [
          {
            "op":"Add",
            "path":"manager",
            "value":
              [
                {
                  "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
                  "value":"2819c223-7f76-453a-919d-413861904646"}]}]}
    

    要求は、SCIM サービスの実装用に Microsoft 共通言語基盤ライブラリによって、サービスのプロバイダーの Update メソッドの呼び出しに変換されます。The Microsoft Common Language Infrastructure libraries for implementing SCIM services would translate the request into a call to the Update method of the service’s provider. Update メソッドのシグネチャを次に示します。Here is the signature of the Update method:

      // System.Threading.Tasks.Tasks and 
      // System.Collections.Generic.IReadOnlyCollection<T>
      // are defined in mscorlib.dll.  
      // Microsoft.SystemForCrossDomainIdentityManagement.IPatch, 
      // Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase, 
      // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
      // Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation, 
      // Microsoft.SystemForCrossDomainIdentityManagement.OperationName, 
      // Microsoft.SystemForCrossDomainIdentityManagement.IPath and 
      // Microsoft.SystemForCrossDomainIdentityManagement.OperationValue 
      // are all defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
    
      System.Threading.Tasks.Task Update(
        Microsoft.SystemForCrossDomainIdentityManagement.IPatch patch, 
        string correlationIdentifier);
    
      public interface Microsoft.SystemForCrossDomainIdentityManagement.IPatch
      {
      Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase 
        PatchRequest 
          { get; set; }
      Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier 
        ResourceIdentifier 
          { get; set; }        
      }
    
      public class PatchRequest2: 
        Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase
      {
      public System.Collections.Generic.IReadOnlyCollection
        <Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation> 
          Operations
          { get;}
    
      public void AddOperation(
        Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation operation);
      }
    
      public class PatchOperation
      {
      public Microsoft.SystemForCrossDomainIdentityManagement.OperationName 
        Name
        { get; set; }
    
      public Microsoft.SystemForCrossDomainIdentityManagement.IPath 
        Path
        { get; set; }
    
      public System.Collections.Generic.IReadOnlyCollection
        <Microsoft.SystemForCrossDomainIdentityManagement.OperationValue> Value
        { get; }
    
      public void AddValue(
        Microsoft.SystemForCrossDomainIdentityManagement.OperationValue value);
      }
    
      public enum OperationName
      {
        Add,
        Remove,
        Replace
      }
    
      public interface IPath
      {
        string AttributePath { get; }
        System.Collections.Generic.IReadOnlyCollection<IFilter> SubAttributes { get; }
        Microsoft.SystemForCrossDomainIdentityManagement.IPath ValuePath { get; }
      }
    
      public class OperationValue
      {
        public string Reference
        { get; set; }
    
        public string Value
        { get; set; }
      }
    

    ユーザーを更新する要求の例では、patch 引数の値として指定されたオブジェクトのプロパティ値は次のようになります。In the example of a request to update a user, the object provided as the value of the patch argument has these property values:

    • ResourceIdentifier.Identifier:"54D382A4-2050-4C03-94D1-E769F1D15682"ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    • (PatchRequest as PatchRequest2).Operations.Count:1(PatchRequest as PatchRequest2).Operations.Count: 1
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).OperationName:OperationName.Add(PatchRequest as PatchRequest2).Operations.ElementAt(0).OperationName: OperationName.Add
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Path.AttributePath: "manager"(PatchRequest as PatchRequest2).Operations.ElementAt(0).Path.AttributePath: "manager"
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.Count:1(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.Count: 1
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Reference: http://.../scim/Users/2819c223-7f76-453a-919d-413861904646(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Reference: http://.../scim/Users/2819c223-7f76-453a-919d-413861904646
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value:2819c223-7f76-453a-919d-413861904646(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value: 2819c223-7f76-453a-919d-413861904646
  2. SCIM サービスによってアクセスされる ID ストアからユーザーのプロビジョニングを解除するために、Azure AD は次のような要求を送信します。To de-provision a user from an identity store fronted by an SCIM service, Azure AD sends a request such as:

      DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
      Authorization: Bearer ...
    

    サービスの作成時に SCIM サービスの実装用に Microsoft が提供する共通言語基盤ライブラリを使用した場合、要求はサービスのプロバイダーの Delete メソッドの呼び出しに変換されます。If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Delete method of the service’s provider. このメソッドのシグネチャを次に示します。That method has this signature:

      // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
      // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
      // is defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
      System.Threading.Tasks.Task Delete(
        Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier  
          resourceIdentifier, 
        string correlationIdentifier);
    

    ユーザーのプロビジョニングを解除する要求の例では、resourceIdentifier 引数の値として指定されたオブジェクトのプロパティ値は次のようになります。The object provided as the value of the resourceIdentifier argument has these property values in the example of a request to de-provision a user:

  3. SCIM サービスによってアクセスされる ID ストアからユーザーのプロビジョニングを解除するために、Azure AD は次のような要求を送信します。To de-provision a user from an identity store fronted by an SCIM service, Azure AD sends a request such as:

     DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
     Authorization: Bearer ...
    

    サービスの作成時に SCIM サービスの実装用に Microsoft が提供する CLI ライブラリを使用した場合、要求はサービスのプロバイダーの Delete メソッドの呼び出しに変換されます。If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Delete method of the service’s provider. このメソッドのシグネチャを次に示します。That method has this signature:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
     // is defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
     System.Threading.Tasks.Task Delete(
       Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier  
         resourceIdentifier, 
       string correlationIdentifier);
    

    ユーザーのプロビジョニングを解除する要求の例では、resourceIdentifier 引数の値として指定されたオブジェクトのプロパティ値は次のようになります。The object provided as the value of the resourceIdentifier argument has these property values in the example of a request to de-provision a user:

    • ResourceIdentifier.Identifier:"54D382A4-2050-4C03-94D1-E769F1D15682"ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

ユーザーとグループのスキーマ リファレンスUser and group schema reference

Azure Active Directory は、2 種類のリソースを SCIM Web サービスにプロビジョニングできます。Azure Active Directory can provision two types of resources to SCIM web services. その 2 種類のリソースは、ユーザーとグループです。Those types of resources are users and groups.

ユーザー リソースは、スキーマ識別子 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User で識別されます。この識別子については、このプロトコル仕様 (https://tools.ietf.org/html/rfc7643 ) に記載されています。User resources are identified by the schema identifier, urn:ietf:params:scim:schemas:extension:enterprise:2.0:User, which is included in this protocol specification: https://tools.ietf.org/html/rfc7643. Azure Active Directory 内のユーザーの属性をユーザー リソースの属性に対応付ける既定のマッピングを表 1 に示します。The default mapping of the attributes of users in Azure Active Directory to the attributes of user resources is provided in Table 1.

グループ リソースは、スキーマ識別子 urn:ietf:params:scim:schemas:core:2.0:Group で識別されます。Group resources are identified by the schema identifier, urn:ietf:params:scim:schemas:core:2.0:Group. Azure Active Directory 内のグループの属性をグループ リソースの属性に対応付ける既定のマッピングを表 2 に示します。Table 2 shows the default mapping of the attributes of groups in Azure Active Directory to the attributes of group resources.

表 1:既定のユーザー属性マッピングTable 1: Default user attribute mapping

Azure Active Directory ユーザーAzure Active Directory user "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User""urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
IsSoftDeletedIsSoftDeleted activeactive
displayNamedisplayName displayNamedisplayName
Facsimile-TelephoneNumberFacsimile-TelephoneNumber phoneNumbers[type eq "fax"].valuephoneNumbers[type eq "fax"].value
givenNamegivenName name.givenNamename.givenName
jobTitlejobTitle titletitle
mailmail emails[type eq "work"].valueemails[type eq "work"].value
mailNicknamemailNickname externalIdexternalId
managermanager managermanager
mobilemobile phoneNumbers[type eq "mobile"].valuephoneNumbers[type eq "mobile"].value
objectIdobjectId idID
postalCodepostalCode addresses[type eq "work"].postalCodeaddresses[type eq "work"].postalCode
proxy-Addressesproxy-Addresses emails[type eq "other"].Valueemails[type eq "other"].Value
physical-Delivery-OfficeNamephysical-Delivery-OfficeName addresses[type eq "other"].Formattedaddresses[type eq "other"].Formatted
streetAddressstreetAddress addresses[type eq "work"].streetAddressaddresses[type eq "work"].streetAddress
surnamesurname name.familyNamename.familyName
telephone-Numbertelephone-Number phoneNumbers[type eq "work"].valuephoneNumbers[type eq "work"].value
user-PrincipalNameuser-PrincipalName userNameuserName

表 2:既定のグループ属性マッピングTable 2: Default group attribute mapping

Azure Active Directory グループAzure Active Directory group urn:ietf:params:scim:schemas:core:2.0:Groupurn:ietf:params:scim:schemas:core:2.0:Group
displayNamedisplayName externalIdexternalId
mailmail emails[type eq "work"].valueemails[type eq "work"].value
mailNicknamemailNickname displayNamedisplayName
membersmembers membersmembers
objectIdobjectId idID
proxyAddressesproxyAddresses emails[type eq "other"].Valueemails[type eq "other"].Value

Azure AD プロビジョニング サービスで使用される IP アドレスが SCIM 要求を行うことを許可するAllow IP addresses used by the Azure AD provisioning service to make SCIM requests

特定のアプリでは、アプリへの受信トラフィックが許可されます。Certain apps allow inbound traffic to their app. Azure AD プロビジョニング サービスが期待通りに機能するためには、使用する IP アドレスが許可されている必要があります。In order for the Azure AD provisioning service to function as expected, the IP addresses used must be allowed. 各サービス タグ/リージョンの IP アドレスの一覧については、「Azure IP 範囲とサービス タグ – パブリック クラウド」という JSON ファイルを参照してください。For a list of IP addresses for each service tag/region, see the JSON file - Azure IP Ranges and Service Tags – Public Cloud. これらの IP は、必要に応じて、お使いのファイアウォールにダウンロードしてプログラムすることができます。You can download and program these IPs into your firewall as needed. Azure AD プロビジョニングの予約済み IP 範囲は、"AzureActiveDirectoryDomainServices" にあります。The reserved IP ranges for Azure AD provisioning can be found under "AzureActiveDirectoryDomainServices."