Compartir a través de


Multi-Factor Authentication

Multi-Factor Authentication (MFA) ayuda a proteger el acceso a los datos y las aplicaciones, a la vez que mantiene la simplicidad para los usuarios. Proporciona seguridad adicional al requerir una segunda forma de autenticación y ofrece una autenticación segura a través de una variedad de métodos de autenticación fáciles de usar. Los usuarios pueden o no ser impugnados para Multi-Factor Authentication en función de las decisiones de configuración que toma un administrador.

Modelo de aplicaciones seguras

El requisito de Multi-Factor Authentication puede complicar cualquier automatización que haya desarrollado porque se debe proporcionar una segunda forma de autenticación al autenticarse. Para contenido con este requisito, el modelo de aplicación segura se desarrolló para proporcionar instrucciones sobre cómo se puede realizar la autenticación adecuada en escenarios no interactivos. Este modelo se compone de dos pasos distintos

Paso Descripción
Consentir Aquí donde se autenticará de forma interactiva mediante el flujo de código de autorización o el flujo de código del dispositivo. La respuesta de Azure Active Directory contendrá un token de acceso y un token de actualización. El valor del token de actualización debe almacenarse en algún lugar seguro, como Azure Key Vault. La aplicación usará este valor, o script, en lugar de la credencial de usuario al autenticarse.
Exchange Con el token de actualización almacenado de forma segura, generado a través del paso de consentimiento, solicitará un nuevo token de acceso desde Azure Active Directory. Consulte Actualizar el token de acceso para obtener más información sobre el valor del token de actualización.

Importante

De forma predeterminada, la duración de un token de actualización es de 90 días. Por lo tanto, es importante que tenga un proceso para actualizar el token de actualización antes de la expiración. Si expira, recibirá un error similar al siguiente al intentar intercambiarlo por un token de acceso. El token de actualización ha expirado debido a la inactividad. El token se emitió el 2019-01-02T09:19:53.5422744Z y estaba inactivo para 90.00:00:00.

El paso de consentimiento se puede realizar a través de varios métodos diferentes. Al usar PowerShell, se recomienda usar el cmdlet New-SecMgmtAccessToken . A continuación se muestra un ejemplo de cómo puede solicitar un nuevo token de acceso para su uso con Microsoft Graph o este módulo de 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

Al usar el UseAuthorizationCode parámetro, se le pedirá que se autentificación de forma interactiva mediante el flujo de código de autorización. El valor del URI de redirección se generará dinámicamente. Este proceso de generación intentará encontrar un puerto entre 8400 y 8999 que no está en uso. Una vez encontrado un puerto disponible, se construirá el valor de la dirección URL de redireccionamiento (por ejemplo, http://localhost:8400). Por lo tanto, es importante que haya configurado el valor del URI de redireccionamiento para la aplicación de Azure Active Directory en consecuencia.

El primer comando obtiene las credenciales de la entidad de servicio (identificador de aplicación y secreto) y, a continuación, las almacena en la $credential variable . El segundo comando generará un nuevo token de acceso mediante las credenciales de la entidad de servicio almacenadas en la $credential variable y el flujo de código de autorización. La salida de este comando contendrá varios valores, incluido un token de actualización. Ese valor debe almacenarse en algún lugar seguro, como Azure Key Vault porque se usará en lugar de credenciales de usuario en futuras operaciones.

Exchange

El paso de intercambio se puede realizar a través de varios métodos diferentes. Al usar PowerShell, se recomienda usar el cmdlet New-SecMgmtAccessToken . A continuación se muestra un ejemplo de cómo intercambiar un token de actualización para un token de acceso.

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

El primer comando obtiene las credenciales de la entidad de servicio (identificador de aplicación y secreto) y, a continuación, las almacena en la $credential variable . El tercer comando generará un nuevo token de acceso mediante las credenciales de la entidad de servicio almacenadas en la $credential variable y el token de actualización almacenado en la variable para la $refreshToken autenticación.

Ejemplos

En las secciones siguientes se muestra cómo usar el cmdlet New-SecMgmtAccessToken para solicitar tokens de acceso y conectarse a otros módulos de PowerShell usados habitualmente.

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:

Al conectarse a un entorno en el que tenga el administrador en nombre de los privilegios, deberá especificar el identificador de inquilino para el entorno de destino mediante el Tenant parámetro . Con respecto al programa Proveedor de soluciones en la nube, esto significa que especificará el identificador de inquilino del inquilino de Azure Active Directory del cliente mediante el Tenant parámetro .

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

Al conectarse a un entorno en el que tenga el administrador en nombre de los privilegios, deberá especificar el identificador de inquilino para el entorno de destino mediante el Tenant parámetro . Con respecto al programa Proveedor de soluciones en la nube, esto significa que especificará el identificador de inquilino del inquilino de Azure Active Directory del cliente mediante el Tenant parámetro .

PowerShell de Exchange Online

Al generar el token de actualización inicial, deberá usar lo siguiente:

$token = New-SecMgmtAccessToken -Module ExchangeOnline

Importante

Después de invocar los comandos anteriores, encontrará que el valor del token de actualización está disponible a través de $token.RefreshToken. Este valor debe almacenarse en un repositorio seguro, como Azure Key Vault, para asegurarse de que es adecuado, ya que se usará en lugar de credenciales.

Use lo siguiente para generar un nuevo token de acceso mediante la actualización y, a continuación, cree la sesión en la que se conectará 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

El identificador de aplicación a0c73c16-a7e3-4564-9a95-2bdf47383716 es para la aplicación Azure Active Direcotry de PowerShell Exchange Online. Al solicitar un acceso o actualizar un token para su uso con Exchange Online PowerShell, deberá usar este valor.

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