パートナー センター API を使用してユーザーにライセンスを割り当てる

顧客ユーザーにライセンスを割り当てる方法。

前提条件

  • パートナー センターの認証に関するページで説明している資格情報。 このシナリオでは、アプリとユーザーの資格情報を使用した認証のみがサポートされます。

  • 顧客 ID です (customer-tenant-id)。 顧客の ID がわからない場合は、[顧客] ワークスペースを選択し、顧客の一覧から顧客を選択し、[アカウント] を選択して、パートナー センター検索できます。 顧客の [アカウント] ページで、[顧客アカウント情報] セクションで Microsoft ID をします。 Microsoft ID は、顧客 ID (customer-tenant-id) と同じです。

  • 顧客ユーザー識別子。 この ID は、ライセンスを割り当てるユーザーを識別します。

  • ライセンスの製品を識別する製品 SKU 識別子。

GDAP ロール

次の GDAP ロールのうち少なくとも 1 つが必要です。

  • ライセンス管理者
  • ユーザー管理者
  • ディレクトリ ライター

コードを使用したライセンスの割り当て

ユーザーにライセンスを割り当てるときは、顧客のサブスクライブ済み SKU のコレクションから選択する必要があります。 次に、割り当てる製品を特定したら、割り当てを行うために各製品の製品 SKU ID を取得する必要があります。 各 SubscribedSku インスタンスには、ProductSku オブジェクトを参照して ID を取得できる ProductSku プロパティが含まれています

ライセンスの割り当て要求には、1 つのライセンス グループのライセンスが含まれている必要があります。 たとえば、同じ要求で Group1Group2 からライセンスを割り当てることはできません。 1 つの要求で複数のグループからライセンスを割り当てようとすると、適切なエラーが発生して失敗します。 ライセンス グループ別に利用可能なライセンスを確認するには、「ライセンス グループ別に利用可能なライセンスの一覧を取得する」を参照してください

コードを使用してライセンスを割り当てる手順を次に示します。

  1. LicenseAssignment オブジェクトをインスタンス化します。 このオブジェクトを使用して、割り当てる製品 SKU とサービス プランを指定します。

    LicenseAssignment license = new LicenseAssignment();
    
  2. 次に示すように、オブジェクトのプロパティを設定します。 このコードでは、製品 SKU ID が既にあり、使用可能なすべてのサービス プランが割り当てられていることを前提としています (つまり、除外されることはありません)。

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. 製品 SKU ID がない場合は、サブスクライブされている SKU のコレクションを取得し、そのうちの 1 つから製品 SKU ID を取得する必要があります。 製品 SKU 名がわかっている場合の例を次に示します。

    var customerSubscribedSkus = partnerOperations.Customers.ById(selectedCustomerId).SubscribedSkus.Get();
    var sku = customerSubscribedSkus.Items.Where(n => n.ProductSku.Name == "Office 365 Enterprise E3").First();
    license.SkuId = sku.ProductSku.Id;
    license.ExcludedPlans = null;
    
  4. 次に、LicenseAssignmentの新しいリストをインスタンス化し、ライセンス オブジェクトを追加します。 一覧に個別に追加することで、複数のライセンスを割り当てることができます。 この一覧に含まれるライセンスは、同じライセンス グループのライセンスである必要があります。

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. LicenseUpdate インスタンスを作成し、ライセンス割り当ての一覧を LicensesToAssign プロパティに割り当てます。

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Create メソッドまたは CreateAsync メソッドを呼び出し、次に示すようにライセンス更新オブジェクトを渡してライセンスを割り当てます。

    var assignLicense = partnerOperations.Customers.ById(selectedCustomerId).Users.ById(selectedCustomerUserId).LicenseUpdates.Create(updateLicense);
    

C#

顧客ユーザーにライセンスを割り当てるには、まず LicenseAssignment オブジェクトをインスタンス化し、Skuid プロパティと ExcludedPlans プロパティを設定します。 このオブジェクトを使用して、割り当てる製品 SKU と除外するサービス プランを指定します。 次に、LicenseAssignmentの新しいリストをインスタンス化し、そのリストにライセンス オブジェクトを追加します。 次に、LicenseUpdate インスタンスを作成し、ライセンス割り当ての一覧を LicensesToAssign プロパティに割り当てます。

次に、顧客 ID と共に IAggregatePartner.Customers.ById メソッドを使用して顧客を識別し 、ユーザー ID を持つ Users.ById メソッドを使用してユーザーを識別します。 次に、License更新 プロパティから顧客のユーザー ライセンス更新操作へのインターフェイスを取得します。

最後に、Create メソッドまたは CreateAsync メソッドを呼び出し、ライセンス更新オブジェクトを渡してライセンスを割り当てます。

// IAggregatePartner partnerOperations;
// string selectedCustomerUserId;
// string selectedCustomerId;
// string selectedProductSkuId;

// Instantiate and populate a LicenseAssignment object.
LicenseAssignment license = new LicenseAssignment();
license.SkuId = selectedProductSkuId;
license.ExcludedPlans = null;

// Instantiate a list of licenses to assign and add the license to it.
List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
licenseList.Add(license);

// Instantiate a LicenseUpdate object and add the list of licenses to assign.
LicenseUpdate updateLicense = new LicenseUpdate();
updateLicense.LicensesToAssign = licenseList;

// Update the user licenses.
var assignLicense = partnerOperations.Customers.ById(selectedCustomerId).Users.ById(selectedCustomerUserId).LicenseUpdates.Create(updateLicense);

サンプル: コンソール テスト アプリプロジェクト: パートナー センター SDK サンプル クラス: CustomerUserAssignLicenses.cs

REST 要求

要求の構文

認証方法 要求 URI
投稿 {baseURL}/v1/customers/{customer-id}/users/{user-id}/licenseupdates HTTP/1.1

URI パラメーター

顧客とユーザーを識別するには、次のパス パラメーターを使用します。

名前 タイプ Required 説明
customer-id string はい 顧客を識別する GUID 形式の ID。
user-id string はい ユーザーを識別する GUID 形式の ID。

要求ヘッダー

詳細については、「パートナー センター REST ヘッダー」を参照してください。

要求本文

割り当てるライセンスを指定する LicenseUpdate リソースを要求本文に含めます。

要求の例

POST https://api.partnercenter.microsoft.com/v1/customers/0c39d6d5-c70d-4c55-bc02-f620844f3fd1/users/554526aa-cf5e-46fa-95df-98dbc55d8a1e/licenseupdates HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: a37d3009-665d-4e12-b76e-1aa10cf80140
MS-CorrelationId: c73c9570-c352-459e-98a3-dafe4bd8c821
X-Locale: en-US
MS-PartnerCenter-Client: Partner Center .NET SDK
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 183
Expect: 100-continue

{
    "LicensesToAssign": [{
            "ExcludedPlans": null,
            "SkuId": "f8a1db68-be16-40ed-86d5-cb42ce701560"
        }
    ],
    "LicensesToRemove": null,
    "LicenseWarnings": null,
    "Attributes": {
        "ObjectType": "LicenseUpdate"
    }
}

重要

2023 年 6 月の時点で、最新のパートナー センター .NET SDK リリース 3.4.0 がアーカイブされるようになりました。 SDK リリースは、有用な情報が記載された readme ファイルと一緒に GitHub からダウンロードできます。

パートナーの皆様には、パートナー センター REST API を引き続き使用することをお勧めします。

REST 応答

成功した場合、HTTP 応答状態コード 201 が返され、応答本文にライセンス情報を含む LicenseUpdate リソースが含まれます

応答の成功とエラーのコード

各応答には、成功または失敗を示す HTTP ステータス コードと、追加のデバッグ情報が付属しています。 このコード、エラーの種類、追加のパラメーターを読み取るには、ネットワーク トレース ツールを使用します。 完全な一覧については、パートナー センターの REST エラーコードに関する記事を参照してください。

応答の例 (成功)

HTTP/1.1 201 Created
Content-Length: 139
Content-Type: application/json; charset=utf-8
MS-CorrelationId: c73c9570-c352-459e-98a3-dafe4bd8c821
MS-RequestId: a37d3009-665d-4e12-b76e-1aa10cf80140
MS-CV: 5AnzcZQrvUqCq3kd.0
MS-ServerId: 030020525
Date: Thu, 20 Apr 2017 21:50:39 GMT

{
    "licensesToAssign": [{
            "skuId": "f8a1db68-be16-40ed-86d5-cb42ce701560"
        }
    ],
    "licenseWarnings": [],
    "attributes": {
        "objectType": "LicenseUpdate"
    }
}

応答の例 (ライセンスは使用できません)

HTTP/1.1 400 Bad Request
Content-Length: 341
Content-Type: application/json; charset=utf-8
MS-CorrelationId: c73c9570-c352-459e-98a3-dafe4bd8c821
MS-RequestId: f4f3b748-8b22-4d07-a5a1-dceb32824192
MS-CV: 5npA0K22CUmWPOzB.0
MS-ServerId: 102030524
Date: Thu, 20 Apr 2017 22:12:36 GMT

{
    "code": 60012,
    "description": "We are sorry, it looks like you have run out of licenses. Buy more licenses, and then try again.",
    "data": ["LicenseQuotaExceededException : Subscription with Account 0c39d6d5-c70d-4c55-bc02-f620844f3fd1 and SKU f8a1db68-be16-40ed-86d5-cb42ce701560 does not have any available licenses left."],
    "source": "PartnerFD"
}

応答の例 (無効なトークン)

HTTP/1.1 400 Bad Request
Content-Length: 342
Content-Type: application/json; charset=utf-8
MS-CorrelationId: c5359db2-fb21-485c-90b1-0a2c3b484783
MS-RequestId: f0caf048-380c-4d6f-968a-3ccce01e11c1
MS-CV: 6npA0K22CUmWPOzC.0
MS-ServerId: 102045524
Date: Thu, 20 Apr 2023 21:12:36 GMT

{
    "code": 900316,
    "description": "Partner token is not allowed in license management calls. Please call with Partner Access Token. To learn more, see https://learn.microsoft.com/partner-center/developer/enable-secure-app-model#get-access-token",
    "source": "PartnerFD"
}

応答の例 (条件付きアクセス ポリシーの問題)

HTTP/1.1 403 Forbidden
Content-Length: 342
Content-Type: application/json; charset=utf-8
MS-CorrelationId: c5359db2-fb21-485c-90b1-0a2c3b484783
MS-RequestId: f0caf048-380c-4d6f-968a-3ccce01e11c1
MS-CV: 6npA0K22CUmWPOzC.0
MS-ServerId: 102045524
Date: Thu, 20 Apr 2023 21:12:36 GMT

{
    "code": 900309,
    "description": "Access has been blocked by Conditional Access policies. The access policy does not allow token issuance. Learn more at https://learn.microsoft.com/azure/active-directory/conditional-access/concept-conditional-access-users-groups.",
    "source": "PartnerFD"
}