Buscar o certificado RSAT de um ambiente em um arquivo zip

Observação

Os grupos de interesse da comunidade passaram do Yammer para o Microsoft Viva Engage. Para se juntar a uma comunidade Viva Engage e participar nas discussões mais recentes, preencha o formulário Solicitar acesso à Comunidade Viva Engage de Finanças e Operações e escolha a comunidade à qual pretende juntar-se.

Importante

A partir de fevereiro de 2026, novos clientes não poderão criar projetos no Microsoft Dynamics Lifecycle Services para Microsoft Dynamics 365 Finance, Microsoft Dynamics 365 Human Resources, Microsoft Dynamics 365 Supply Chain Management e Microsoft Dynamics 365 Project Operations. Os novos clientes devem usar o centro de administração do Power Platform em vez disso. Para mais informações, consulte o congelamento de criação de projetos do Lifecycle Services.

Pode obter o pacote de certificados Regression Suite Automation Tool (RSAT) para um ambiente através do Microsoft Dynamics Lifecycle Services através da API Lifecycle Services Environment. Essa API retorna um arquivo zip codificado em Base 64 e uma senha codificada em Base 64 para a senha de certificado privado.

O processo completo para consumir o zip pode ser encontrado na página de instalação e configuração da Ferramenta de Automação do Regression Suite .

Permissões

Aplicação API

Uma das permissões a seguir é necessária para chamar esta API. Para obter mais informações sobre permissões e como selecioná-las, consulte API de movimentação de banco de dados - Autenticação.

Tipo de permissão Permissões (do menos privilegiado ao mais privilegiado)
Delegada (conta escolar ou profissional) user_impersonation

Serviços ao Ciclo de Vida

Nos Serviços de Ciclo de Vida, o utilizador utilizado na autenticação OAuth da API deve ser adicionado ao projeto como proprietário do projeto ou administrador de ambiente. O usuário deve aceitar o convite para o projeto.

Pedido HTTP

Use o seguinte ponto de extremidade GET para buscar o arquivo zip para o certificado RSAT de um ambiente.

Buscar o certificado RSAT por ambiente

GET /environmentinfo/v1/rsatdownload/project/{projectId}/environment/{environmentId}

Cabeçalhos de pedidos

Use os seguintes valores de cabeçalho no cabeçalho da solicitação HTTP.

Cabeçalho Value
Autorização Portador {token} (obrigatório)
'x-ms-versão' '2017-09-15' (obrigatório)
Tipo de Conteúdo application/json

Corpo do pedido

Não forneça um corpo do pedido para este método.

Resposta

HTTP

A resposta é sempre uma resposta "200 OK", a menos que você não esteja autenticado corretamente. Certifique-se de usar a propriedade IsSuccess para avaliar o sucesso ou a falha da ação.

Dados

Propriedade Description
CertificadoZipEncoded Um zip contendo o arquivo . PFX e . CER em uma matriz de bytes codificada em Base 64.
CertificateSecretEncoded O segredo privado do certificado privado como uma cadeia de caracteres codificada em Base 64. Isso mudará todos os pedidos.
CertificateThumbprint A impressão digital do certificado privado.
ExpirationDateTimeUTC Uma data e hora em UTC (exibidas em formato de texto completo) após as quais o certificado não é válido.
ExpiraçãoISODateTimeUTC Uma data e hora em UTC (exibidas no formato ISO 8606) após as quais o certificado não é válido.
Nome do ficheiro O nome do arquivo do zip que está sendo retornado.

Resposta de exemplo

Resposta bem-sucedida para uma solicitação no nível do projeto

{
    "Data": {
        "CertificateZipEncoded": "<base 64-encoded zip>",
        "CertificateSecretEncoded": "<base 64-encoded password>",
        "CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00",
        "ExpirationDateTimeUTC": "Sunday, September 4, 2022 4:00:00 AM",
        "ExpirationISODateTimeUTC": "2022-09-04T04:00:00Z",
        "Filename": "RSATCertificate_TestEnv1_20210805-100102.zip"
    },
    "IsSuccess": true,
    "OperationActivityId": "2234bff0-432d-478b-a5ac-1ccb529ee698",
    "ErrorMessage": null,
    "VersionEOL": "9999-12-31T23:59:59.9999999"
}

Análise de dados via PowerShell

O seguinte script de exemplo comunica com a API dos Serviços de Ciclo de Vida para descarregar o ficheiro zip do certificado RSAT para a máquina local. Ele mostra a senha do certificado privado na janela do console. Um token de acesso deve ser fornecido.

# Basic Lifecycle Services API RSAT certificate zip download script
#
# This will download the RSAT certificate bundle for an environment
# to the current directory and display the private certificate's password
# in the console.
#
# The user used in the API authentication must be added to the
# project as an Environment Admin or Project Owner

# Configuration
$accessToken = "{access token string}";
$projId = {project id integer};
$envId = "{environment id GUID}"
$baseLCSAPI = "lcsapi.lcs.dynamics.com";

$url = "https://$baseLCSAPI/environmentinfo/v1/rsatdownload/project/$projId/environment/$envId"
 
$headers = @{
    "Authorization" = "Bearer $accessToken"
    "x-ms-version" = "2017-09-15"
    "Content-Type" = "application/json"
}

# Reset variable between executions
$certificateResponse = $null 
$shouldRetry = $false

do {
    $shouldRetry = $false

    try {
        # GET request to Lifecycle Services API
        $certificateResponse = Invoke-RestMethod $url -Method 'GET' -Headers $headers
    } catch {
        # Check if this is a HTTP 429 error
        if ($_.Exception.Response.StatusCode.value__ -eq 429) {

            # Too many requests for this environment, wait and retry
            $shouldRetry = $true
            $retrySeconds = [int]$_.Exception.Response.Headers['Retry-After']
            Write-Host "Too many requests - Retrying in $retrySeconds seconds"
            Start-Sleep -Seconds $retrySeconds
        } else {
            throw
        }
    }
} while($shouldRetry)

if ((-not $certificateResponse.IsSuccess) -or ($certificateResponse.Data -eq $null)) {
    Write-Host $certificateResponse.ErrorMessage
    throw
}

$fileName = $certificateResponse.Data.Filename
$certificateZip = [System.Convert]::FromBase64String($certificateResponse.Data.CertificateZipEncoded)
$certificateSecret = [System.Text.Encoding]::ASCII.GetString(
                            [System.Convert]::FromBase64String(
                                $certificateResponse.Data.CertificateSecretEncoded))

# Save the zip to the local disk.
# Could add unzipping in memory and install certificates to correct local certificate stores.
Set-Content $fileName -Value $certificateZip -Encoding Byte

Write-Host "Certificate bundle downloaded to $fileName with private certificate password $certificateSecret"

Limites tarifários

Para melhorar as solicitações de balanceamento de carga, há limites de taxa nessa API. Estes limites também são partilhados com a interface web dos Lifecycle Services.

  • 1 chamada para cada ambiente por minuto

Observação

As solicitações que excederem os limites de taxa serão rejeitadas e uma resposta "HTTP 429 Too Many Requests" será retornada. O cabeçalho retry-after indicará o número de segundos que a solicitação pode ser repetida depois.