Asignación de licencias a un usuario a través de las API del Centro de partners

Asignación de licencias a un usuario cliente.

Requisitos previos

  • Credenciales tal como se describen en el artículo Autenticación del Centro de partners. Este escenario admite la autenticación solo con credenciales de aplicación y usuario.

  • Un id. de cliente (customer-tenant-id). Si no conoce el identificador del cliente, puede buscarlo en el Centro de partners seleccionando el área de trabajo Clientes , luego el cliente de la lista de clientes y, a continuación , Cuenta. En la página Cuenta del cliente, busque el identificador de Microsoft en la sección Información de la cuenta de cliente. El id. de Microsoft es el mismo que el de cliente (customer-tenant-id).

  • Identificador de usuario del cliente. Este identificador identifica al usuario al que asignar la licencia.

  • Identificador de SKU de producto que identifica el producto para la licencia.

Roles de GDAP

Necesita al menos uno de los siguientes roles de GDAP:

  • Administrador de licencias
  • Administrador de usuarios
  • Escritores de directorios

Asignación de licencias mediante código

Al asignar licencias a un usuario, debe elegir entre la colección de SKU suscritas del cliente. Después, después de identificar los productos que desea asignar, debe obtener el identificador de SKU del producto para cada producto para realizar las asignaciones. Cada instancia de SubscribedSku contiene una propiedad ProductSku desde la que puede hacer referencia al objeto ProductSku y obtener el identificador.

Una solicitud de asignación de licencias debe contener licencias de un único grupo de licencias. Por ejemplo, no puede asignar licencias de Group1 y Group2 en la misma solicitud. Se producirá un error al intentar asignar licencias de más de un grupo en una sola solicitud. Para averiguar qué licencias están disponibles por grupo de licencias, consulte Obtención de una lista de licencias disponibles por grupo de licencias.

Estos son los pasos para asignar licencias a través del código:

  1. Cree una instancia de un objeto LicenseAssignment. Use este objeto para especificar la SKU del producto y los planes de servicio que se van a asignar.

    LicenseAssignment license = new LicenseAssignment();
    
  2. Rellene las propiedades del objeto como se muestra a continuación. Este código supone que ya tiene el identificador de SKU del producto y que se asignarán todos los planes de servicio disponibles (es decir, ninguno se excluirá).

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. Si no tiene el identificador de SKU del producto, debe recuperar la colección de SKU suscritas y obtener el identificador de SKU del producto de uno de ellos. Este es un ejemplo si conoce el nombre de la SKU del producto.

    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. A continuación, cree una instancia de una nueva lista de tipo LicenseAssignment y agregue el objeto de licencia. Puede asignar más de una licencia agregando cada una individualmente a la lista. Las licencias incluidas en esta lista deben ser del mismo grupo de licencias.

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. Cree una instancia de LicenseUpdate y asigne la lista de asignaciones de licencias a la propiedad LicensesToAssign.

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Llame al método Create o CreateAsync y pase el objeto de actualización de licencia como se muestra a continuación para asignar las licencias.

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

C#

Para asignar una licencia a un usuario cliente, cree primero una instancia de un objeto LicenseAssignment y rellene las propiedades Skuid y ExcludedPlans. Este objeto se usa para especificar la SKU del producto que se va a asignar y los planes de servicio que se van a excluir. A continuación, cree una instancia de una nueva lista de tipo LicenseAssignment y agregue el objeto de licencia a la lista. A continuación, cree una instancia de LicenseUpdate y asigne la lista de asignaciones de licencias a la propiedad LicensesToAssign.

A continuación, use el método IAggregatePartner.Customers.ById con el identificador de cliente para identificar al cliente y el método Users.ById con el identificador de usuario para identificar al usuario. A continuación, obtenga una interfaz para las operaciones de actualización de licencias de usuario del cliente de la propiedad License Novedades.

Por último, llame al método Create o CreateAsync y pase el objeto de actualización de licencia para asignar la licencia.

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

Ejemplo: Aplicación de prueba de consola. Project: Clase de ejemplos del SDK del Centro de partners: CustomerUserAssignLicenses.cs

Solicitud REST

Sintaxis de la solicitud

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

Parámetros de URI

Use los siguientes parámetros de ruta de acceso para identificar al cliente y al usuario.

Nombre Type Obligatorio Descripción
customer-id string Identificador con formato GUID que identifica al cliente.
user-id string Identificador con formato GUID que identifica al usuario.

Encabezados de solicitud

Para obtener más información, consulta Encabezados REST del Centro de partners.

Cuerpo de la solicitud

Incluya un recurso LicenseUpdate en el cuerpo de la solicitud que especifique las licencias que se van a asignar.

Ejemplo de solicitud

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 partir de junio de 2023, la versión 3.4.0 más reciente del SDK de .NET del Centro de partners ahora está archivada. Puede descargar esta versión del SDK de GitHub, junto con un archivo Léame que contiene información útil.

Se recomienda a los partners seguir usando las API REST del Centro de partners.

Respuesta REST

Si se ejecuta correctamente, se devuelve un código de estado de respuesta HTTP 201 y el cuerpo de la respuesta contiene un recurso LicenseUpdate con la información de licencia.

Códigos de error y de respuesta correctos

Cada respuesta incluye un código de estado HTTP que indica si la operación se ha realizado correctamente o con errores y proporciona información de depuración adicional. Use una herramienta de seguimiento de red para leer este código, el tipo de error y los parámetros adicionales. Para obtener la lista completa, consulta Códigos de error de REST del Centro de partners.

Ejemplo de respuestas (correctas)

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

Ejemplo de respuesta (la licencia no está 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"
}

Ejemplo de respuesta (token no válido)

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

Ejemplo de respuesta (problema de directiva de acceso condicional)

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