Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
En plus des jetons d’accès Bearer et PoP, MSAL Browser prend également en charge l’obtention de certificats SSH éphémères qui permettent aux utilisateurs d’accéder à distance aux machines virtuelles Linux Azure via le protocole SSH. Ce document décrit le modèle d’utilisation recommandé des API MSAL acquireToken lors de l’acquisition de ces certificats SSH.
Acquisition d’un certificat SSH
Prérequis
MSAL s’occupe de l’acquisition, de la mise en cache et du renouvellement (ou de l'« actualisation ») du certificat SSH demandé. Les actions suivantes sont la responsabilité de l’application cliente :
- Génération d’une paire de clés RSA que le certificat SSH est censé signer
- Stockage sécurisé de ladite paire de clés
- Récupération de la clé publique à partir de la paire de clés susmentionnée et de son identifiant de clé unique, puis fourniture aux API MSAL
acquireTokenutilisées - Activation des ressources, des étendues et des autorisations requises dans l’inscription d’application Azure AD de l’application cliente
- Utilisation du certificat SSH pour effectuer des demandes autorisées à la ressource en question
Demande de certificat SSH
Pour acquérir un certificat SSH, les paramètres suivants doivent être ajoutés à la demande d’authentification :
| Parameter | Valeur | Description |
|---|---|---|
authenticationScheme |
ssh-cert (AuthenticationScheme.SSH) |
Le schéma d’authentification de la demande indique à MSAL quel type d’informations d’identification demander. Les options sont Bearer, pop et ssh-cert. MSAL fournit l’énumération AuthenticationScheme qui répertorie ces options. |
sshJwk |
Une clé publique RSA sérialisée sous forme de chaîne au format JSON Web Key | Le JWK SSH est la version sérialisée (stringified) du composant de clé publique de la clé RSA générée par l’application. |
sshKid |
Chaîne qui identifie de façon unique la sshJwk clé RSA. |
L’ID de clé SSH est utilisé pour identifier et faire correspondre de manière unique le certificat SSH obtenu par MSAL pour le compte de l’application. |
MSAL n’utilise pas la componenet de clé privée de la clé RSA en question. Il incombe à l’application cliente de stocker et de récupérer en toute sécurité la clé privée si nécessaire.
Exemple de requête de redirection pour l’obtention d’un jeton
// Configure SSH Key Data
const sshKeyData = {
key: PUBLIC_KEY_JWK, // Replace with your SSH Public Key in JSON Web Key object format
keyId: "PUBLIC_KEY_ID" // Replace with the SSH Public Key's unique ID
};
// Configure SSH Certificate Request
const sshCertificateRequest = {
scopes: ["SAMPLE_SSH_SCOPE"], // Replace with your resource's scope
authenticationScheme: msal.AuthenticationScheme.SSH,
sshJwk: JSON.stringify(sshKeyData.key),
sshKid: sshKeyData.keyId
}
Remarque : définir authenticationScheme sur AuthenticationScheme.SSH rendra les attributs sshJwk et sshKid obligatoires, ce qui fera échouer la requête avec un ClientConfigurationError si l’un des deux est omis.
Une fois la demande configurée et SSH définie en tant que authenticationScheme, elle peut être envoyée à l’API acquireToken MSAL v2.
// The SSH Certificate will be the string value contained in the accessToken property of the AuthenticationResult object
const { accessToken } = await myMSALObj.acquireTokenRedirect(sshCertificateRequest);
Exemple de requête d’acquisition silencieuse de jeton
L’acquisition silencieuse de certificats SSH nécessite les mêmes modifications de la configuration de la demande de jeton qu’avec les API interactives acquireToken :
// Configure SSH Key Data
const sshKeyData = {
key: PUBLIC_KEY_JWK, // Replace with your SSH Public Key in JSON Web Key object format
keyId: "PUBLIC_KEY_ID" // Replace with the SSH Public Key's unique ID
};
// Configure SSH Certificate Request
const silentSshCertificateRequest = {
scopes: ["SAMPLE_SSH_SCOPE"], // Replace with your resource's scope
authenticationScheme: msal.AuthenticationScheme.SSH,
sshJwk: JSON.stringify(sshKeyData.key),
sshKid: sshKeyData.keyId
}
// Try to acquire certificate silently
const { accessToken } = await myMSALObj.acquireTokenSilent(silentSshTokenRequest).catch(async (error) => {
console.log("Silent token acquisition failed.");
if (error instanceof msal.InteractionRequiredAuthError) {
// Fallback to interaction if silent call fails
console.log("Acquiring SSH Certificate using redirect");
myMSALObj.acquireTokenRedirect(silentSshCertificateRequest);
} else {
console.error(error);
}
});