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:
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();
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;
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;
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);
Crie uma instância LicenseUpdate e atribua a lista de atribuições de licença à propriedade LicensesToAssignment.
LicenseUpdate updateLicense = new LicenseUpdate(); updateLicense.LicensesToAssign = licenseList;
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"
}