Condividi tramite


Multi-Factor Authentication

Multi-Factor Authentication (MFA) consente di proteggere l'accesso ai dati e alle applicazioni mantenendo semplicità per gli utenti. Offre ulteriore sicurezza richiedendo una seconda forma di autenticazione nonché un'autenticazione avanzata tramite una gamma di metodi di autenticazione semplici. Gli utenti possono o non essere sfidati per Multi-Factor Authentication in base alle decisioni di configurazione eseguite da un amministratore.

Modello di applicazione sicura

Il requisito per Multi-Factor Authentication può complicare qualsiasi automazione sviluppata perché è necessario specificare una seconda forma di autenticazione durante l'autenticazione. Per il contenuto di questo requisito, il modello di applicazione sicura è stato sviluppato per fornire indicazioni su come l'autenticazione appropriata può essere eseguita in scenari non interattivi. Questo modello è costituito da due passaggi distinti

Passaggio Descrizione
Consenso In questo modo si esegue l'autenticazione in modo interattivo usando il flusso di codice di autorizzazione o il flusso di codice del dispositivo. La risposta di Azure Active Directory conterrà un token di accesso e un token di aggiornamento. Il valore del token di aggiornamento deve essere archiviato in un punto sicuro, ad esempio Azure Key Vault. Questo valore verrà usato dall'applicazione o dallo script anziché dalle credenziali utente durante l'autenticazione.
Exchange Usando il token di aggiornamento archiviato in modo sicuro, generato tramite il passaggio di consenso, verrà richiesto un nuovo token di accesso da Azure Active Directory. Per altre informazioni sul valore del token di aggiornamento, vedere Aggiornare il token di accesso .

Importante

Per impostazione predefinita, la durata di un token di aggiornamento è di 90 giorni. È quindi importante avere un processo per aggiornare il token di aggiornamento prima della scadenza. Se scade, si riceverà un errore simile al seguente quando si tenta di scambiarlo per un token di accesso Il token di aggiornamento è scaduto a causa dell'inattività. Il token è stato rilasciato nel 2019-01-02T09:19:53.5422744Z ed è stato inattivo per 90.00:00:00:00.

Il passaggio di consenso può essere eseguito tramite diversi metodi. Quando si usa PowerShell, è consigliabile usare il cmdlet New-SecMgmtAccessToken . Di seguito è riportato un esempio di come è possibile richiedere un nuovo token di accesso da usare con microsoft Graph o questo modulo di 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

Importante

Quando si usa il UseAuthorizationCode parametro viene richiesto di eseguire l'autenticazione in modo interattivo usando il flusso del codice di autorizzazione. Il valore dell'URI di reindirizzamento genererà dinamicamente. Questo processo di generazione tenterà di trovare una porta compresa tra 8400 e 8999 che non è in uso. Dopo aver trovato una porta disponibile, il valore dell'URL di reindirizzamento verrà costruito (ad esempio http://localhost:8400). È quindi importante configurare il valore dell'URI di reindirizzamento per l'applicazione Azure Active Directory di conseguenza.

Il primo comando ottiene le credenziali dell'entità servizio (identificatore dell'applicazione e segreto) e quindi li archivia nella $credential variabile. Il secondo comando genererà un nuovo token di accesso usando le credenziali dell'entità servizio archiviate nella $credential variabile e il flusso del codice di autorizzazione. L'output di questo comando conterrà diversi valori, tra cui un token di aggiornamento. Tale valore deve essere archiviato in un punto sicuro, ad esempio Azure Key Vault perché verrà usato anziché le credenziali utente nelle operazioni future.

Exchange

Il passaggio di scambio può essere eseguito tramite diversi metodi. Quando si usa PowerShell, è consigliabile usare il cmdlet New-SecMgmtAccessToken . Di seguito è riportato un esempio di come scambiare un token di aggiornamento per un token di accesso.

$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'

Il primo comando ottiene le credenziali dell'entità servizio (identificatore dell'applicazione e segreto) e quindi li archivia nella $credential variabile. Il terzo comando genererà un nuovo token di accesso usando le credenziali dell'entità servizio archiviate nella $credential variabile e il token di aggiornamento archiviato nella $refreshToken variabile per l'autenticazione.

Esempi

Le sezioni seguenti illustrano come usare il cmdlet New-SecMgmtAccessToken per richiedere token di accesso e connettersi ad altri moduli di PowerShell comunemente usati.

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'

Nota

Quando ci si connette a un ambiente in cui si dispone di amministratore per conto dei privilegi, è necessario specificare l'identificatore del tenant per l'ambiente di destinazione tramite il Tenant parametro . Per quanto riguarda il programma Cloud Solution Provider, questo significa che si specifica l'identificatore del tenant di Azure Active Directory del cliente usando il Tenant parametro .

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

Nota

Quando ci si connette a un ambiente in cui si dispone di amministratore per conto dei privilegi, è necessario specificare l'identificatore del tenant per l'ambiente di destinazione tramite il Tenant parametro . Per quanto riguarda il programma Cloud Solution Provider, questo significa che si specifica l'identificatore del tenant di Azure Active Directory del cliente usando il Tenant parametro .

PowerShell per Exchange Online

Quando si genera il token di aggiornamento iniziale, è necessario usare quanto segue

$token = New-SecMgmtAccessToken -Module ExchangeOnline

Importante

Dopo aver richiamato i comandi precedenti, il valore del token di aggiornamento è disponibile tramite $token.RefreshToken. Questo valore deve essere archiviato in un repository sicuro, ad esempio Azure Key Vault per assicurarsi che sia appropriato perché verrà usato anziché le credenziali.

Usare il comando seguente per generare un nuovo token di accesso usando l'aggiornamento e quindi creare la sessione in cui si connetterà a 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

Importante

L'identificatore dell'applicazione a0c73c16-a7e3-4564-9a95-2bdf47383716 è per l Exchange Online'applicazione PowerShell Azure Active Direcotry. Quando si richiede un accesso o un aggiornamento, il token per l'uso con Exchange Online PowerShell sarà necessario usare questo valore.

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