Récupérer le certificat RSAT d’un environnement dans un fichier zip

Note

Les groupes d’intérêts communautaires sont maintenant passés de Yammer à Microsoft Viva Engage. Pour participer à une communauté Viva Engage et participer aux dernières discussions, renseignez le formulaire Demander l’accès à la communauté Finance et Operations Viva Engage , puis choisissez la communauté que vous souhaitez rejoindre.

Important

À compter de février 2026, les nouveaux clients ne peuvent pas créer de projets dans Microsoft Dynamics Lifecycle Services pour Microsoft Dynamics 365 Finance, Microsoft Dynamics 365 Human Resources, Microsoft Dynamics 365 Supply Chain Management et Microsoft Dynamics 365 Project Operations. Les nouveaux clients doivent utiliser le Centre d’administration Power Platform à la place. Pour plus d’informations, consultez Gel de la création du projet Lifecycle Services.

Vous pouvez extraire l’offre groupée de certificats Regression Suite Automation Tool (RSAT) pour un environnement via Microsoft Dynamics Lifecycle Services via l’API Environnement des services de cycle de vie. Cette API retourne un fichier zip codé en base 64 et un mot de passe codé en base 64 pour le mot de passe du certificat privé.

Le processus complet de consommation du fichier zip se trouve dans la page d’installation et de configuration de Regression Suite Automation Tool .

Autorisations

Application API

L’une des autorisations suivantes est requise pour appeler cette API. Pour plus d’informations sur les autorisations et leur sélection, consultez l’API de déplacement de base de données - Authentification.

Type d’autorisation Autorisations (des moins privilégiées au plus privilégiées)
Déléguée (compte professionnel ou scolaire) user_impersonation

Services de cycle de vie

Dans Lifecycle Services, l’utilisateur qui est utilisé dans l’authentification OAuth de l’API doit être ajouté au projet en tant que propriétaire de projet ou administrateur d’environnement. L’utilisateur doit accepter l’invitation au projet.

Demande HTTP

Utilisez le point de terminaison GET suivant pour récupérer le fichier zip pour le certificat RSAT d’un environnement.

Récupérer le certificat RSAT par environnement

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

En-têtes de demande

Utilisez les valeurs d’en-tête suivantes dans l’en-tête de requête HTTP.

En-tête Valeur
Autorisation Porteur {token} (obligatoire)
'x-ms-version' '2017-09-15' (obligatoire)
Content-Type application/json

Corps de la demande

N’indiquez pas le corps de la demande pour cette méthode.

Réponse

HTTP

La réponse est toujours une réponse « 200 OK », sauf si vous n’êtes pas correctement authentifié. Veillez à utiliser la propriété IsSuccess pour évaluer la réussite ou l’échec de l’action.

Data

Propriété Description
CertificateZipEncoded Zip contenant le fichier . PFX et . Fichiers CER dans un tableau d’octets codé en base 64.
CertificateSecretEncoded Secret privé du certificat privé sous forme de chaîne codée en base 64. Cette opération modifie chaque requête.
CertificateThumbprint Empreinte numérique du certificat privé.
ExpirationDateTimeUTC Date et heure UTC (affichées au format texte intégral) après lesquelles le certificat n’est pas valide.
ExpirationISODateTimeUTC Date et heure UTC (affichées au format ISO 8606) après lesquelles le certificat n’est pas valide.
Filename Nom de fichier du fichier zip retourné.

Exemple de réponse

Réponse réussie pour une requête au niveau du projet

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

Analyse des données via PowerShell

L’exemple de script suivant communique avec l’API Lifecycle Services pour télécharger le fichier zip du certificat RSAT sur l’ordinateur local. Il affiche le mot de passe du certificat privé dans la fenêtre de console. Un jeton d’accès doit être fourni.

# 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 de taux

Pour améliorer l’équilibrage de charge des requêtes, il existe des limites de débit sur cette API. Ces limites sont également partagées avec l’interface web des services de cycle de vie.

  • 1 appel pour chaque environnement par minute

Note

Les requêtes qui dépassent les limites de débit sont rejetées et une réponse « HTTP 429 Trop de requêtes » est retournée. L’en-tête de nouvelle tentative indique le nombre de secondes que la requête peut être retentée après.