Compartilhar via


Atribuir licenças a um usuário por meio de APIs do Partner Center

Como atribuir licenças a um usuário cliente.

Pré-requisitos

  • Credenciais, conforme descrito em Autenticação do Partner Center. Este cenário dá suporte somente à autenticação com credenciais de aplicativo + de usuário.

  • Um identificador de usuário do cliente. Esse ID identifica o usuário a quem atribuir a licença.

  • Um identificador de SKU do produto que identifica o produto para a licença.

Funções GDAP

Você precisa de pelo menos uma das seguintes funções GDAP:

  • Administrador de Licenças
  • Administrador de usuários
  • Gravadores de diretório

Atribuição de licenças através de código

Ao atribuir licenças a um usuário, você deve escolher entre a coleção de SKUs inscritos do cliente. Em seguida, tendo identificado os produtos que você deseja atribuir, você deve obter o ID de SKU do produto para cada produto, a fim de fazer as atribuições. Cada instância de SubscribedSku contém uma propriedade ProductSku a partir da qual você pode fazer referência ao objeto ProductSku e obter a ID.

Aqui estão as etapas para atribuir licenças por meio de código:

  1. Instancie um objeto LicenseAssignment . Use esse objeto para especificar a SKU do produto e os planos de serviço a serem atribuídos.

    LicenseAssignment license = new LicenseAssignment();
    
  2. Preencha as propriedades do objeto conforme mostrado abaixo. Esse código pressupõe que você já tenha a ID de SKU do produto e que todos os planos de serviço disponíveis serão atribuídos (ou seja, nenhum será excluído).

    license.SkuId = selectedProductSkuId;
    license.ExcludedPlans = null;
    
  3. Se você não tiver a ID da SKU do produto, precisará recuperar a coleção de SKUs assinadas e obter a ID da SKU do produto de uma delas. Aqui está um exemplo se você souber o nome do SKU do produto.

    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. Em seguida, instancie uma nova lista do tipo LicenseAssignment e adicione o objeto de licença. Você pode atribuir mais de uma licença adicionando cada uma individualmente à lista. As licenças incluídas nesta lista devem ser do mesmo grupo de licenças.

    List<LicenseAssignment> licenseList = new List<LicenseAssignment>();
    licenseList.Add(license);
    
  5. Crie uma instância LicenseUpdate e atribua a lista de atribuições de licença à propriedade LicensesToAssignment.

    LicenseUpdate updateLicense = new LicenseUpdate();
    updateLicense.LicensesToAssign = licenseList;
    
  6. Chame o método Create ou CreateAsync e passe o objeto de atualização de licença conforme mostrado abaixo para atribuir as licenças.

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

C#

Para atribuir uma licença a um usuário cliente, primeiro instancie um objeto LicenseAssignment e preencha as propriedades Skuid e ExcludedPlans. Use esse objeto para especificar a SKU do produto a ser atribuída e os planos de serviço a serem excluídos. Em seguida, instancie uma nova lista do tipo LicenseAssignment e adicione o objeto de licença à lista. Em seguida, crie uma instância LicenseUpdate e atribua a lista de atribuições de licença à propriedade LicensesToAssignment.

Em seguida, use o método IAggregatePartner.Customers.ById com o ID do cliente para identificar o cliente e o método Users.ById com o ID do usuário para identificar o usuário. Em seguida, obtenha uma interface para operações de atualização de licença de usuário do cliente a partir da propriedade LicenseUpdates .

Finalmente, chame o método Create ou CreateAsync e passe o objeto de atualização de licença para atribuir a licença.

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

Exemplo: Aplicativo de teste de console. Projeto: Exemplos de SDK do Partner Center Classe: CustomerUserAssignLicenses.cs

Solicitação REST

Sintaxe da solicitação

Método URI da solicitação
POST {baseURL}/v1/customers/{customer-id}/users/{user-id}/licenseupdates HTTP/1.1

Parâmetros do URI

Use os seguintes parâmetros de caminho para identificar o cliente e o usuário.

Nome Digitar Obrigatória Descrição
id do cliente string Yes Uma ID formatada em GUID que identifica o cliente.
user-id string Yes Uma ID formatada em GUID que identifica o usuário.

Cabeçalhos da solicitação

Para obter mais informações, confira Cabeçalhos REST do Partner Center.

Corpo da solicitação

Inclua um recurso LicenseUpdate no corpo da solicitação que especifique as licenças a serem atribuídas.

Exemplo de solicitação

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 junho de 2023, a versão 3.4.0 mais recente do SDK do Partner Center .NET foi arquivada. Você pode baixar a versão do SDK no GitHub, juntamente com um arquivo leiame que contém informações úteis.

Os parceiros são incentivados a continuar a usar as APIs REST do Partner Center.

Resposta REST

Se bem-sucedido, um código de status de resposta HTTP 201 é retornado e o corpo da resposta contém um recurso LicenseUpdate com as informações de licença.

Códigos de êxito e de erro de resposta

Cada resposta vem com um código de status HTTP que indica êxito ou falha e informações de depuração adicionais. Use uma ferramenta de rastreamento de rede para ler esse código, o tipo de erro e os parâmetros adicionais. Para obter a lista completa, confira Códigos de erro REST do Partner Center.

Exemplo de resposta (êxito)

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

Exemplo de resposta (a licença não está disponível)

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

Exemplo de resposta (token invá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"
}

Exemplo de resposta (Problema de política de acesso 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"
}