Attribuer des licences à un utilisateur via des API de l’Espace partenaires

Comment attribuer des licences à un utilisateur client.

Prérequis

  • Informations d’identification, comme décrit dans Authentification auprès de l’Espace partenaires. Ce scénario prend en charge l’authentification avec les informations d’identification de l’application et de l’utilisateur uniquement.

  • ID du client (customer-tenant-id). Si vous ne connaissez pas l’ID du client, vous pouvez le rechercher dans l’Espace de partenaires en sélectionnant l’espace de travail Clients, puis le client dans la liste des clients, puis compte. Dans la page Compte du client, recherchez l’ID Microsoft dans la section Informations sur le compte client. L’ID Microsoft est le même que l’ID de client (customer-tenant-id).

  • Identificateur d’utilisateur client. Cet ID identifie l’utilisateur auquel attribuer la licence.

  • Identificateur de référence SKU de produit qui identifie le produit pour la licence.

Rôles GDAP

Vous avez besoin d’au moins l’un des rôles GDAP suivants :

  • Administrateur de licence
  • Administrateur d’utilisateurs
  • Enregistreurs de répertoire

Attribution de licences via du code

Lorsque vous attribuez des licences à un utilisateur, vous devez choisir parmi la collection de références SKU abonnées du client. Ensuite, après avoir identifié les produits que vous souhaitez affecter, vous devez obtenir l’ID de référence (SKU) du produit pour chaque produit afin d’effectuer les affectations. Chaque instance SubscribedSku contient une propriété ProductSku à partir de laquelle vous pouvez référencer l’objet ProductSku et obtenir l’ID.

Une demande d’attribution de licence doit contenir des licences d’un seul groupe de licences. Par exemple, vous ne pouvez pas attribuer de licences à partir de Group1 et Group2 dans la même requête. Une tentative d’attribution de licences à partir de plusieurs groupes dans une seule requête échoue avec une erreur appropriée. Pour savoir quelles licences sont disponibles par groupe de licences, consultez Obtenir la liste des licences disponibles par groupe de licences.

Voici les étapes à suivre pour attribuer des licences par le biais du code :

  1. Instanciez un objet LicenseAssignment. Vous utilisez cet objet pour spécifier la référence SKU de produit et les plans de service à affecter.

    LicenseAssignment license = new LicenseAssignment();
    
  2. Remplissez les propriétés de l’objet comme indiqué ci-dessous. Ce code part du principe que vous disposez déjà de l’ID de référence (SKU) du produit et que tous les plans de service disponibles seront attribués (autrement dit, aucun n’est exclu).

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. Si vous n’avez pas l’ID de référence SKU du produit, vous devez récupérer la collection de références SKU abonnées et obtenir l’ID de référence SKU du produit à partir de l’un d’entre eux. Voici un exemple si vous connaissez le nom de la référence SKU du produit.

    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. Ensuite, instanciez une nouvelle liste de types LicenseAssignment et ajoutez l’objet de licence. Vous pouvez attribuer plusieurs licences en ajoutant chaque licence individuellement à la liste. Les licences incluses dans cette liste doivent provenir du même groupe de licences.

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. Créez une instance LicenseUpdate et attribuez la liste des attributions de licences à la propriété LicensesToAssign.

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Appelez la méthode Create ou CreateAsync et transmettez l’objet de mise à jour de licence, comme indiqué ci-dessous pour affecter les licences.

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

C#

Pour affecter une licence à un utilisateur client, instanciez d’abord un objet LicenseAssignment et remplissez les propriétés Skuid et ExcludedPlans. Vous utilisez cet objet pour spécifier la référence SKU du produit pour affecter et pour exclure des plans de service. Ensuite, instanciez une nouvelle liste de type LicenseAssignment et ajoutez l’objet de licence à la liste. Créez ensuite une instance LicenseUpdate et attribuez la liste des attributions de licences à la propriété LicensesToAssign.

Ensuite, utilisez la méthode IAggregatePartner.Customers.ById avec l’ID client pour identifier le client, et la méthode Users.ById avec l’ID utilisateur pour identifier l’utilisateur. Obtenez ensuite une interface pour les opérations de mise à jour de licence utilisateur client à partir de la propriété License Mises à jour.

Enfin, appelez la méthode Create ou CreateAsync et transmettez l’objet de mise à jour de licence pour affecter la 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);

Exemple : Application de test de console. Projet : Classe d’exemples sdk de l’Espace partenaires : CustomerUserAssignLicenses.cs

Demande REST

Syntaxe de la requête

Méthode URI de demande
POST {baseURL}/v1/customers/{customer-id}/users/{user-id}/licenseupdates HTTP/1.1

Paramètres d’URI

Utilisez les paramètres de chemin d’accès suivants pour identifier le client et l’utilisateur.

Nom Type Requise Description
id-client string Oui ID au format GUID qui identifie le client.
user-id string Oui ID au format GUID qui identifie l’utilisateur.

En-têtes de requête

Pour plus d’informations, consultez En-têtes REST de l’Espace Partenaires.

Corps de la demande

Incluez une ressource LicenseUpdate dans le corps de la demande qui spécifie les licences à attribuer.

Exemple de requête

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

Important

Depuis juin 2023, la dernière version du Kit de développement logiciel (SDK) .NET de l’Espace partenaires version 3.4.0 est désormais archivée. Vous pouvez télécharger la version du SDK à partir de GitHub, ainsi qu’un fichier lisezmoi contenant des informations utiles.

Les partenaires sont encouragés à continuer à utiliser les API REST de l’Espace partenaires.

Réponse REST

Si elle réussit, un code d’état de réponse HTTP 201 est retourné et le corps de la réponse contient une ressource LicenseUpdate avec les informations de licence.

Codes d’erreur et de réussite de la réponse

Chaque réponse est accompagnée d’un code d’état HTTP qui indique la réussite ou l’échec ainsi que des informations de débogage supplémentaires. Utilisez un outil de trace réseau pour lire ce code, le type d’erreur et des paramètres supplémentaires. Pour obtenir la liste complète, consultez Codes d’erreur REST de l’Espace partenaires.

Exemple de réponse (réussite)

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

Exemple de réponse (la licence n’est pas disponible)

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

Exemple de réponse (jeton non valide)

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

Exemple de réponse (problème de stratégie d’accès conditionnel)

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