Dela via


Tilldela licenser till en användare via Partnercenter-API:er

Så här tilldelar du licenser till en kundanvändare.

Förutsättningar

  • Autentiseringsuppgifter enligt beskrivningen i Partnercenter-autentisering. Det här scenariot stöder endast autentisering med App+User-autentiseringsuppgifter.

  • En kundanvändaridentifierare. Det här ID:t identifierar den användare som licensen ska tilldelas till.

  • En produkt-SKU-identifierare som identifierar produkten för licensen.

GDAP-roller

Du behöver minst en av följande GDAP-roller:

  • Licensadministratör
  • Användaradministratör
  • Katalogförfattare

Tilldela licenser via kod

När du tilldelar licenser till en användare måste du välja från kundens samling prenumerations-SKU:er. Efter att ha identifierat de produkter som du vill tilldela måste du sedan hämta produktens SKU-ID för varje produkt för att kunna utföra tilldelningarna. Varje SubscribedSku-instans innehåller en ProductSku-egenskap som du kan referera till ProductSku-objektet från och hämta ID:t från.

Här följer stegen för att tilldela licenser via kod:

  1. Instansiera ett LicenseAssignment-objekt. Du använder det här objektet för att ange produkt-SKU och tjänstplaner som ska tilldelas.

    LicenseAssignment license = new LicenseAssignment();
    
  2. Fyll i objektegenskaperna enligt nedan. Den här koden förutsätter att du redan har produktens SKU-ID och att alla tillgängliga tjänstplaner kommer att tilldelas (det vill säga ingen kommer att undantas).

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. Om du inte har SKU-ID:t för produkten måste du hämta samlingen med prenumerations-SKU:er och hämta produktens SKU-ID från någon av dem. Här är ett exempel om du känner till produktens SKU-namn.

    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. Sedan instansierar du en ny lista av typen LicenseAssignment och lägger till licensobjektet. Du kan tilldela fler än en licens genom att lägga till var och en individuellt i listan. Licenserna som ingår i den här listan måste komma från samma licensgrupp.

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. Skapa en LicenseUpdate-instans och tilldela listan över licenstilldelningar till egenskapen LicensesToAssign.

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Anropa metoden Skapa eller SkapaAsync och skicka licensuppdateringsobjektet enligt nedan för att tilldela licenserna.

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

C#

Om du vill tilldela en licens till en kundanvändare instansierar du först ett LicenseAssignment-objekt och fyller i egenskaperna Skuid och ExcludedPlans. Du använder det här objektet för att ange den produkt-SKU som ska tilldelas och tjänstplaner som ska undantas. Sedan instansierar du en ny lista av typen LicenseAssignment och lägger till licensobjektet i listan. Skapa sedan en LicenseUpdate-instans och tilldela listan över licenstilldelningar till egenskapen LicensesToAssign.

Använd sedan metoden IAggregatePartner.Customers.ById med kund-ID:t för att identifiera kunden och metoden Users.ById med användar-ID:t för att identifiera användaren. Hämta sedan ett gränssnitt för uppdateringsåtgärder för kundanvändares licens från egenskapen Licens Uppdateringar.

Anropa slutligen metoden Skapa eller SkapaAsync och skicka licensuppdateringsobjektet för att tilldela licensen.

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

Exempel: Konsoltestapp. Projekt: SDK-exempelklass för Partnercenter: CustomerUserAssignLicenses.cs

REST-begäran

Syntax för begäran

Metod URI för förfrågan
POST {baseURL}/v1/customers/{customer-id}/users/{user-id}/licenseupdates HTTP/1.1

URI-parametrar

Använd följande sökvägsparametrar för att identifiera kunden och användaren.

Namn Typ Obligatoriskt Beskrivning
kund-ID sträng Ja Ett GUID-formaterat ID som identifierar kunden.
användar-ID sträng Ja Ett GUID-formaterat ID som identifierar användaren.

Begärandehuvuden

Mer information finns i REST-huvuden för Partnercenter.

Begärandetext

Inkludera en LicenseUpdate-resurs i begärandetexten som anger vilka licenser som ska tilldelas.

Exempel på begäran

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: aaaa0000-bb11-2222-33cc-444444dddddd
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"
    }
}

Viktigt!

Från och med juni 2023 arkiveras nu den senaste Partner Center .NET SDK-versionen 3.4.0. Du kan ladda ned SDK-versionen från GitHub tillsammans med en readme-fil som innehåller användbar information.

Partner uppmanas att fortsätta att använda REST-API:er för Partnercenter.

REST-svar

Om det lyckas returneras en HTTP-svarsstatuskod 201 och svarstexten innehåller en LicenseUpdate-resurs med licensinformationen.

Svarsframgång och felkoder

Varje svar levereras med en HTTP-statuskod som anger lyckad eller misslyckad och ytterligare felsökningsinformation. Använd ett verktyg för nätverksspårning för att läsa den här koden, feltypen och ytterligare parametrar. Den fullständiga listan finns i Rest-felkoder för Partnercenter.

Svarsexempel (lyckades)

HTTP/1.1 201 Created
Content-Length: 139
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
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"
    }
}

Svarsexempel (licensen är inte tillgänglig)

HTTP/1.1 400 Bad Request
Content-Length: 341
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
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"
}

Svarsexempel (ogiltig token)

HTTP/1.1 400 Bad Request
Content-Length: 342
Content-Type: application/json; charset=utf-8
MS-CorrelationId: bbbb1111-cc22-3333-44dd-555555eeeeee
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"
}

Svarsexempel (problem med princip för villkorsstyrd åtkomst)

HTTP/1.1 403 Forbidden
Content-Length: 342
Content-Type: application/json; charset=utf-8
MS-CorrelationId: bbbb1111-cc22-3333-44dd-555555eeeeee
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"
}