Captura del certificado RSAT de un entorno en un archivo ZIP

Note

Los grupos de interés de la comunidad ahora se han movido de Yammer a Microsoft Viva Engage. Para unirse a una comunidad de Viva Engage y participar en las últimas discusiones, complete el formulario Solicitud de acceso a la Comunidad de Viva Engage de Finanzas y Operaciones y elija la comunidad a la que desea unirse.

Importante

A partir de febrero de 2026, los nuevos clientes no pueden crear proyectos en Microsoft Dynamics Lifecycle Services para Microsoft Dynamics 365 Finance, Microsoft Dynamics 365 Human Resources, Microsoft Dynamics 365 Supply Chain Management y Microsoft Dynamics 365 Project Operations. En su lugar, los nuevos clientes deben usar el Centro de administración de Power Platform . Para obtener más información, consulte Congelación en la creación de proyectos de Lifecycle Services.

Puede capturar el conjunto de certificados de la Herramienta de automatización de conjuntos de regresión (RSAT) para un entorno a través de Microsoft Dynamics Lifecycle Services Services a través de la API del entorno de Servicios de ciclo de vida. Esta API devuelve un archivo ZIP codificado en Base 64 y una contraseña codificada en Base 64 para la contraseña de certificado privado.

El proceso completo para consumir el archivo ZIP se puede encontrar en la página de instalación y configuración de la herramienta automation de Regression Suite .

Permisos

Aplicación de API

Se requiere uno de los siguientes permisos para llamar a esta API. Para obtener más información sobre los permisos y cómo seleccionarlos, consulte API de movimiento de bases de datos: autenticación.

Tipo de permiso Permisos (de menos a más privilegios)
Delegado (cuenta profesional o educativa) user_impersonation

Servicios de ciclo de vida

En Lifecycle Services, el usuario que se usa en la autenticación de OAuth de API debe agregarse al proyecto como propietario del proyecto o administrador de entornos. El usuario debe aceptar la invitación al proyecto.

Solicitud HTTP

Use el siguiente punto de conexión GET para capturar el archivo ZIP para el certificado RSAT de un entorno.

Captura del certificado RSAT por entorno

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

Encabezados de solicitud

Use los siguientes valores de encabezado en el encabezado de solicitud HTTP.

Encabezado Value
Autorización Portador {token} (obligatorio)
"x-ms-version" '2017-09-15' (obligatorio)
Content-Type application/json

Cuerpo de la solicitud

No proporcione un cuerpo de solicitud para este método.

Respuesta

HTTP

La respuesta siempre es una respuesta "200 OK", a menos que no se autentique correctamente. Asegúrese de usar la propiedad IsSuccess para evaluar el éxito o el error de la acción.

Datos

Propiedad Description
CertificateZipEncoded Un archivo ZIP que contiene . PFX y . Archivos CER en una matriz de bytes codificada en Base 64.
CertificateSecretEncoded Secreto privado del certificado privado como una cadena codificada en Base 64. Esto cambiará cada solicitud.
CertificateThumbprint Huella digital del certificado privado.
ExpirationDateTimeUTC Fecha y hora en UTC (que se muestra en formato de texto completo) después del cual el certificado no es válido.
ExpirationISODateTimeUTC Fecha y hora en UTC (que se muestra en formato ISO 8606) después del cual el certificado no es válido.
Nombre de archivo Nombre de archivo del archivo zip que se devuelve.

Respuesta de ejemplo

Respuesta correcta para una solicitud de nivel de proyecto

{
    "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álisis de datos mediante PowerShell

El siguiente script de ejemplo se comunica con la API de Lifecycle Services para descargar el archivo ZIP del certificado RSAT en la máquina local. Muestra la contraseña del certificado privado en la ventana de la consola. Se debe proporcionar un token de acceso.

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

Límites de tarifas

Para equilibrar mejor la carga de las solicitudes, hay límites de velocidad en esta API. Estos límites también se comparten con la interfaz web de Lifecycle Services.

  • 1 llamada para cada entorno por minuto

Note

Se rechazarán las solicitudes que superen los límites de velocidad y se devolverá una respuesta "HTTP 429 Demasiadas solicitudes". El encabezado retry-after indicará el número de segundos que se puede reintentar la solicitud después.