Přiřazení licencí uživateli prostřednictvím rozhraní API Partnerského centra

Přiřazení licencí uživateli zákazníka

Požadavky

  • Přihlašovací údaje popsané v ověřování v Partnerském centru Tento scénář podporuje ověřování pouze s přihlašovacími údaji aplikace a uživatele.

  • ID zákazníka (customer-tenant-id). Pokud neznáte ID zákazníka, můžete ho vyhledat v Partnerském centru tak , že vyberete pracovní prostor Zákazníci , pak zákazník ze seznamu zákazníků a pak účet. Na stránce Účet zákazníka vyhledejte ID Microsoftu v části Informace o účtu zákazníka. ID Microsoftu je stejné jako ID zákazníka (customer-tenant-id).

  • Identifikátor uživatele zákazníka. Toto ID identifikuje uživatele, kterému má licenci přiřadit.

  • Identifikátor skladové položky produktu, který identifikuje produkt pro licenci.

Role GDAP

Potřebujete alespoň jednu z následujících rolí GDAP:

  • Licenční Správa istrator
  • Správce uživatelů
  • Zapisovače adresářů

Přiřazení licencí prostřednictvím kódu

Když uživateli přiřadíte licence, musíte si vybrat z kolekce předplacených skladových položek zákazníka. Potom, když jste identifikovali produkty, které chcete přiřadit, musíte získat ID skladové položky produktu pro každý produkt, aby bylo možné přiřazení provést. Každá instance SubscribedSku obsahuje vlastnost ProductSku, ze které můžete odkazovat na objekt ProductSku a získat ID.

Žádost o přiřazení licence musí obsahovat licence z jedné skupiny licencí. Ve stejné žádosti například nemůžete přiřadit licence ze skupiny Group1 a Group2. Pokus o přiřazení licencí z více než jedné skupiny v jednom požadavku selže s příslušnou chybou. Pokud chcete zjistit, jaké licence jsou dostupné podle skupiny licencí, přečtěte si článek Získání seznamu dostupných licencí podle skupiny licencí.

Tady je postup přiřazení licencí prostřednictvím kódu:

  1. Vytvořte instanci objektu LicenseAssignment . Tento objekt použijete k určení skladové položky produktu a plánů služeb, které se mají přiřadit.

    LicenseAssignment license = new LicenseAssignment();
    
  2. Vyplňte vlastnosti objektu, jak je znázorněno níže. Tento kód předpokládá, že už máte ID skladové položky produktu a že budou přiřazeny všechny dostupné plány služeb (to znamená, že žádné nebudou vyloučeny).

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. Pokud nemáte ID skladové položky produktu, musíte načíst kolekci předplacených skladových položek a získat ID skladové položky produktu z některé z nich. Tady je příklad, pokud znáte název skladové položky produktu.

    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. Dále vytvořte instanci nového seznamu typu LicenseAssignment a přidejte objekt licence. Přidáním každé licence do seznamu můžete přiřadit více než jednu licenci. Licence zahrnuté v tomto seznamu musí být ze stejné skupiny licencí.

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. Vytvořte instanci LicenseUpdate a přiřaďte seznam přiřazení licencí k vlastnosti LicensesToAssign.

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Zavolejte metodu Create nebo CreateAsync a předejte objekt aktualizace licence, jak je znázorněno níže, a přiřaďte licence.

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

C#

Pokud chcete uživateli zákazníka přiřadit licenci, nejprve vytvořte instanci objektu LicenseAssignment a naplňte vlastnosti Skuid a ExcludedPlans. Tento objekt slouží k určení skladové položky produktu pro přiřazení a plány služeb, které se mají vyloučit. Dále vytvořte instanci nového seznamu typu LicenseAssignment a přidejte objekt licence do seznamu. Pak vytvořte instanci LicenseUpdate a přiřaďte seznam přiřazení licencí k vlastnosti LicensesToAssign.

Dále použijte metodu IAggregatePartner.Customers.ById s ID zákazníka k identifikaci zákazníka a metodu Users.ById s ID uživatele k identifikaci uživatele. Potom z vlastnosti Licence získejte rozhraní pro operace aktualizace uživatelských licencí zákazníka Aktualizace.

Nakonec zavolejte metodu Create nebo CreateAsync a předejte objekt aktualizace licence pro přiřazení licence.

// 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);

Ukázka: Konzolová testovací aplikace Projekt: Třída ukázek sady SDK Partnerského centra: CustomerUserAssignLicenses.cs

Požadavek REST

Syntaxe požadavku

metoda Identifikátor URI žádosti
POST {baseURL}/v1/customers/{customer-id}/users/{user-id}/licenseupdates HTTP/1.1

Parametry identifikátoru URI

Pomocí následujících parametrů cesty identifikujte zákazníka a uživatele.

Name Type Požadováno Popis
ID zákazníka string Ano ID formátovaného identifikátorem GUID, které identifikuje zákazníka.
ID uživatele string Ano ID formátovaného identifikátorem GUID, které identifikuje uživatele.

Záhlaví žádosti

Další informace najdete v tématu Hlavičky REST Partnerského centra.

Text požadavku

Do textu požadavku zahrňte prostředek LicenseUpdate, který určuje licence, které se mají přiřadit.

Příklad požadavku

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"
    }
}

Důležité

Od června 2023 se teď archivuje nejnovější verze sady .NET SDK partnerského centra 3.4.0. Vydání sady SDK si můžete stáhnout z GitHubu spolu se souborem readme, který obsahuje užitečné informace.

Doporučujeme, aby partneři dál používali rozhraní REST API Partnerského centra.

Odpověď REST

V případě úspěchu se vrátí stavový kód odpovědi HTTP 201 a text odpovědi obsahuje prostředek LicenseUpdate s informacemi o licenci.

Kódy úspěšnosti a chyb odpovědi

Každá odpověď obsahuje stavový kód HTTP, který označuje úspěch nebo selhání a další informace o ladění. Ke čtení tohoto kódu, typu chyby a dalších parametrů použijte nástroj pro trasování sítě. Úplný seznam najdete v tématu Kódy chyb REST v Partnerském centru.

Příklad odpovědi (úspěch)

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"
    }
}

Příklad odpovědi (licence není k dispozici)

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"
}

Příklad odpovědi (neplatný token)

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"
}

Příklad odpovědi (problém se zásadami podmíněného přístupu)

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"
}