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:
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();
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;
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;
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);
Creare un'istanza di LicenseUpdate e assegnare l'elenco delle assegnazioni di licenza alla proprietà LicensesToAssign.
LicenseUpdate updateLicense = new LicenseUpdate(); updateLicense.LicensesToAssign = licenseList;
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 | Sì | ID formattato GUID che identifica il cliente. |
user-id | string | Sì | 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"
}
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per