Partager via


Azure Multi-Factor Authentication

L’authentification multifacteur (MFA) permet de protéger l’accès aux données et aux applications tout en conservant la simplicité pour les utilisateurs. Elle fournit une sécurité supplémentaire en exigeant une seconde forme d’authentification et fournit une authentification forte par le biais d’une gamme de méthodes d’authentification faciles à utiliser. Les utilisateurs peuvent ou non être contestés pour l’authentification multifacteur en fonction des décisions de configuration prises par un administrateur.

Modèle d’application sécurisé

La condition requise pour l’authentification multifacteur peut compliquer toute automatisation que vous avez développée, car une deuxième forme d’authentification doit être fournie lors de l’authentification. Pour répondre à cette exigence, le modèle d’application sécurisé a été développé pour fournir des conseils sur la façon dont l’authentification appropriée peut être effectuée dans des scénarios non interactifs. Ce modèle est composé de deux étapes distinctes

Étape Description
Consentement Vous vous authentifierez de manière interactive à l’aide du flux de code d’autorisation ou du flux de code d’appareil. La réponse d’Azure Active Directory contiendra un jeton d’accès et un jeton d’actualisation. La valeur du jeton d’actualisation doit être stockée dans un endroit sécurisé, comme Azure Key Vault. Cette valeur sera utilisée par votre application, ou script, au lieu des informations d’identification utilisateur lors de l’authentification.
Exchange À l’aide du jeton d’actualisation stocké en toute sécurité, généré lors de l’étape de consentement, vous allez demander un nouveau jeton d’accès à Azure Active Directory. Pour plus d’informations sur la valeur du jeton d’actualisation, consultez Actualiser le jeton d’accès .

Important

Par défaut, la durée de vie d’un jeton d’actualisation est de 90 jours. Il est donc important que vous disposiez d’un processus de mise à jour du jeton d’actualisation avant l’expiration. S’il expire, vous recevrez une erreur similaire à ce qui suit lorsque vous tentez de l’échanger contre un jeton d’accès Le jeton d’actualisation a expiré en raison de l’inactivité. Le jeton a été émis le 2019-01-02T09:19:53.5422744Z et était inactif pendant 90.00:00:00.

L’étape de consentement peut être effectuée à l’aide de plusieurs méthodes différentes. Lors de l’utilisation de PowerShell, il est recommandé d’utiliser l’applet de commande New-SecMgmtAccessToken . Voici un exemple de la façon dont vous pouvez demander un nouveau jeton d’accès à utiliser avec Microsoft Graph ou ce module PowerShell.

$credential = Get-Credential
New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Scopes 'https://graph.microsoft.com/.default' -ServicePrincipal -Credential $credential -Tenant 'yyyy-yyyy-yyyy-yyyy' -UseAuthorizationCode

Important

Lorsque vous utilisez le UseAuthorizationCode paramètre, vous serez invité à l’authentification de manière interactive à l’aide du flux de code d’autorisation. La valeur de l’URI de redirection est générée dynamiquement. Ce processus de génération tente de trouver un port entre 8400 et 8999 qui n’est pas utilisé. Une fois qu’un port disponible a été trouvé, la valeur de l’URL de redirection est construite (par exemple http://localhost:8400). Il est donc important que vous ayez configuré la valeur de l’URI de redirection pour votre application Azure Active Directory en conséquence.

La première commande obtient les informations d’identification du principal de service (identificateur d’application et secret), puis les stocke dans la $credential variable. La deuxième commande génère un nouveau jeton d’accès à l’aide des informations d’identification du principal de service stockées dans la $credential variable et du flux de code d’autorisation. La sortie de cette commande contient plusieurs valeurs, y compris un jeton d’actualisation. Cette valeur doit être stockée dans un endroit sécurisé, tel qu’Azure Key Vault, car elle sera utilisée à la place des informations d’identification utilisateur dans les opérations futures.

Exchange

L’étape d’échange peut être effectuée à l’aide d’un certain nombre de méthodes différentes. Lors de l’utilisation de PowerShell, il est recommandé d’utiliser l’applet de commande New-SecMgmtAccessToken . Voici un exemple d’échange d’un jeton d’actualisation contre un jeton d’accès.

$credential = Get-Credential
$refreshToken = '<refreshToken>'

New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.microsoft.com/.default' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'

La première commande obtient les informations d’identification du principal de service (identificateur d’application et secret), puis les stocke dans la $credential variable. La troisième commande génère un nouveau jeton d’accès à l’aide des informations d’identification du principal de service stockées dans la $credential variable et du jeton d’actualisation stocké dans la variable pour l’authentification $refreshToken .

Exemples

Les sections suivantes montrent comment utiliser l’applet de commande New-SecMgmtAccessToken pour demander des jetons d’accès et se connecter à d’autres modules PowerShell couramment utilisés.

Azure

Azure PowerShell

$credential = Get-Credential
$refreshToken = '<RefreshToken>'

$azureToken = New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://management.azure.com//user_impersonation' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'
$graphToken = New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.windows.net/.default' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'

# Az Module
Connect-AzAccount -AccessToken $token.AccessToken -AccountId 'azureuser@contoso.com' -GraphAccessToken $graphToken.AccessToken -TenantId 'xxxx-xxxx-xxxx-xxxx'

Notes

Lorsque vous vous connectez à un environnement où vous disposez d’un administrateur pour le compte de privilèges, vous devez spécifier l’identificateur de locataire pour l’environnement cible via le Tenant paramètre . En ce qui concerne le programme Fournisseur de solutions cloud, cela signifie que vous allez spécifier l’identificateur de locataire du locataire Azure Active Directory du client à l’aide du Tenant paramètre .

Microsoft 365

Azure Active Directory

$credential = Get-Credential
$refreshToken = '<RefreshToken>'

$aadGraphToken = New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.windows.net/.default' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'
$graphToken = New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.microsoft.com/.default' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'

Connect-AzureAD -AadAccessToken $aadGraphToken.AccessToken -AccountId 'azureuser@contoso.com' -MsAccessToken $graphToken.AccessToken

Notes

Lorsque vous vous connectez à un environnement où vous disposez d’un administrateur pour le compte de privilèges, vous devez spécifier l’identificateur de locataire pour l’environnement cible via le Tenant paramètre . En ce qui concerne le programme Fournisseur de solutions cloud, cela signifie que vous allez spécifier l’identificateur de locataire du locataire Azure Active Directory du client à l’aide du Tenant paramètre .

Exchange Online PowerShell

Lors de la génération du jeton d’actualisation initial, vous devez utiliser les éléments suivants

$token = New-SecMgmtAccessToken -Module ExchangeOnline

Important

Après avoir appelé les commandes ci-dessus, vous constaterez que la valeur du jeton d’actualisation est disponible via $token.RefreshToken. Cette valeur doit être stockée dans un dépôt sécurisé tel qu’Azure Key Vault pour garantir la sécurité appropriée, car elle sera utilisée à la place des informations d’identification.

Utilisez ce qui suit pour générer un nouveau jeton d’accès à l’aide de l’actualisation, puis créer la session où vous vous connecterez à Exchange Online PowerShell

$customerId = '<CustomerId>'
$customerDomainName = '<CustomerDomainName>'
$refreshToken = '<RefreshTokenValue>'
$upn = '<UPN-used-to-generate-the-refresh-token>'

$token = New-SecMgmtAccessToken -RefreshToken $token.RefreshToken -Scopes 'https://outlook.office365.com/.default' -Tenant $customerId -ApplicationId 'a0c73c16-a7e3-4564-9a95-2bdf47383716'

$tokenValue = ConvertTo-SecureString "Bearer $($token.AccessToken)" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($upn, $tokenValue)

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://outlook.office365.com/powershell-liveid?DelegatedOrg=$($customerDomainName)&BasicAuthToOAuthConversion=true" -Credential $credential -Authentication Basic -AllowRedirection

Import-PSSession $session

Important

L’identificateur d’application a0c73c16-a7e3-4564-9a95-2bdf47383716 est pour l’application Azure Active Direcotry Exchange Online PowerShell. Lorsque vous demandez un jeton d’accès ou d’actualisation à utiliser avec Exchange Online PowerShell, vous devez utiliser cette valeur.

MS Online

$credential = Get-Credential
$refreshToken = '<RefreshToken>'

$aadGraphToken = New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.windows.net/.default' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'
$graphToken = New-SecMgmtAccessToken -ApplicationId 'xxxx-xxxx-xxxx-xxxx' -Credential $credential -RefreshToken $refreshToken -Scopes 'https://graph.microsoft.com/.default' -ServicePrincipal -Tenant 'yyyy-yyyy-yyyy-yyyy'

Connect-MsolService -AdGraphAccessToken $aadGraphToken.AccessToken -MsGraphAccessToken $graphToken.AccessToken