Condividi tramite


Assegnare licenze a un utente tramite le API del Centro per i partner

Come assegnare licenze a un utente del cliente.

Prerequisiti

  • Credenziali descritte in Autenticazione del Centro per i partner. Questo scenario supporta l'autenticazione solo con le credenziali app + utente.

  • Identificatore utente del cliente. Questo ID identifica l'utente a cui assegnare la licenza.

  • Identificatore dello SKU del prodotto che identifica il prodotto per la licenza.

Ruoli GDAP

Sono necessari almeno uno dei ruoli GDAP seguenti:

  • Amministratore licenze
  • Amministratore utenti
  • Ruolo con autorizzazioni di scrittura nella directory

Assegnazione di licenze tramite codice

Quando si assegnano licenze a un utente, è necessario scegliere tra la raccolta di SKU sottoscritti del cliente. Dopo aver identificato i prodotti da assegnare, è necessario ottenere l'ID SKU del prodotto per ogni prodotto per effettuare le assegnazioni. Ogni istanza SubscribedSku contiene una proprietà ProductSku da cui è possibile fare riferimento all'oggetto ProductSku e ottenere l'ID.

Ecco i passaggi per assegnare licenze tramite il codice:

  1. Creare un'istanza di un oggetto LicenseAssignment. Usare questo oggetto per specificare lo SKU del prodotto e i piani di servizio da assegnare.

    LicenseAssignment license = new LicenseAssignment();
    
  2. Popolare le proprietà dell'oggetto come illustrato di seguito. Questo codice presuppone che tu abbia già l'ID SKU del prodotto e che tutti i piani di servizio disponibili verranno assegnati (ovvero nessuno verrà escluso).

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. Se non si ha l'ID SKU del prodotto, è necessario recuperare la raccolta di SKU sottoscritti e ottenere l'ID SKU del prodotto da uno di essi. Di seguito è riportato un esempio se si conosce il nome dello SKU del prodotto.

    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. Creare quindi un'istanza di un nuovo elenco di tipo LicenseAssignment e aggiungere l'oggetto licenza. È possibile assegnare più licenze aggiungendo ognuna singolarmente all'elenco. Le licenze incluse in questo elenco devono appartenere allo stesso gruppo di licenze.

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. Creare un'istanza di LicenseUpdate e assegnare l'elenco delle assegnazioni di licenza alla proprietà LicensesToAssign.

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Chiamare il metodo Create o CreateAsync e passare l'oggetto di aggiornamento della licenza come illustrato di seguito per assegnare le licenze.

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

C#

Per assegnare una licenza a un utente cliente, creare prima un'istanza di un oggetto LicenseAssignment e popolare le proprietà Skuid e ExcludedPlans. Questo oggetto viene usato per specificare lo SKU del prodotto da assegnare e i piani di servizio da escludere. Creare quindi un'istanza di un nuovo elenco di tipo LicenseAssignment e aggiungere l'oggetto licenza all'elenco. Creare quindi un'istanza di LicenseUpdate e assegnare l'elenco delle assegnazioni di licenza alla proprietà LicensesToAssign.

Usare quindi il metodo IAggregatePartner.Customers.ById con l'ID cliente per identificare il cliente e il metodo Users.ById con l'ID utente per identificare l'utente. Ottenere quindi un'interfaccia per le operazioni di aggiornamento delle licenze utente del cliente dalla proprietà License Aggiornamenti.

Infine, chiamare il metodo Create o CreateAsync e passare l'oggetto di aggiornamento della licenza per assegnare la licenza.

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

Esempio: App di test della console. Project: Partner Center SDK Samples Class: CustomerUserAssignLicenses.cs

Richiesta REST

Sintassi della richiesta

metodo URI della richiesta
POST {baseURL}/v1/customers/{customer-id}/users/{user-id}/licenseupdates HTTP/1.1

Parametri URI

Usare i parametri di percorso seguenti per identificare il cliente e l'utente.

Nome Digita Obbligatorio Descrizione
customer-id string ID formattato GUID che identifica il cliente.
user-id string ID formattato GUID che identifica l'utente.

Intestazioni delle richieste

Per altre informazioni, vedi Intestazioni REST del Centro per i partner.

Testo della richiesta

Includere una risorsa LicenseUpdate nel corpo della richiesta che specifica le licenze da assegnare.

Esempio di richiesta

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

Importante

A partire da giugno 2023, la versione più recente di .NET SDK del Centro per i partner 3.4.0 è ora archiviata. È possibile scaricare la versione dell'SDK da GitHub, insieme a un file leggimi che contiene informazioni utili.

I partner sono invitati a continuare a usare le API REST del Centro per i partner.

Risposta REST

In caso di esito positivo, viene restituito un codice di stato della risposta HTTP 201 e il corpo della risposta contiene una risorsa LicenseUpdate con le informazioni sulla licenza.

Codici di errore e di esito della risposta

Ogni risposta viene fornita con un codice di stato HTTP che ne indica l'esito e con informazioni di debug aggiuntive. Usa uno strumento di traccia di rete per leggere il codice, il tipo di errore e parametri aggiuntivi. Per l'elenco completo, vedi Codici di errore REST del Centro per i partner.

Esempio di risposta (esito positivo)

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

Esempio di risposta (licenza non disponibile)

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

Esempio di risposta (token non valido)

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

Esempio di risposta (problema dei criteri di accesso condizionale)

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