Autenticación de Azure con credenciales de usuario

En este artículo se analiza cómo la biblioteca de identidades de Azure admite la autenticación de tokens de Microsoft Entra con credenciales proporcionadas por el usuario. Esta compatibilidad es posible mediante un conjunto de implementaciones de TokenCredential que se describen en este artículo.

En este artículo se tratan los siguientes asuntos:

Para solucionar problemas de autenticación de credenciales de usuario, consulte Solución de problemas de autenticación de credenciales de usuario.

Credencial de código de dispositivo

La credencial de código de dispositivo autentica de forma interactiva a un usuario en dispositivos con una interfaz de usuario limitada. Funciona al pedir al usuario que visite una dirección URL de inicio de sesión en un equipo habilitado para el explorador cuando la aplicación intenta autenticarse. A continuación, el usuario escribe el código de dispositivo mencionado en las instrucciones junto con sus credenciales de inicio de sesión. Tras una autenticación correcta, la aplicación que solicitó la autenticación se autentica correctamente en el dispositivo en el que se ejecuta.

Para más información, consulte Flujo de concesión de autorización de dispositivo de OAuth 2.0 y la Plataforma de identidad de Microsoft.

Habilitación de aplicaciones para el flujo de código de dispositivo

Para autenticar a un usuario mediante el flujo de código de dispositivo, siga estos pasos:

  1. Vaya a Microsoft Entra ID en Azure Portal y busque el registro de la aplicación.
  2. Vaya a la sección Authentication (Autenticación).
  3. En Suggested Redirected URIs (Identificadores URI redirigidos sugeridos), compruebe el identificador URI que termina con /common/oauth2/nativeclient.
  4. En Default Client Type (Tipo de cliente predeterminado), seleccione yes (Sí) para Treat application as a public client (Tratar la aplicación como un cliente público).

Estos pasos permiten que la aplicación se autentique, pero aún no tiene permiso para iniciar sesión en el identificador de Entra de Microsoft o acceder a los recursos en su nombre. Para solucionar este problema, vaya a Permisos de API y habilite Microsoft Graph y los recursos a los que desea acceder, como Key Vault.

También debe ser el administrador del inquilino para conceder consentimiento a la aplicación al iniciar sesión por primera vez.

Si no puede configurar la opción de flujo de código de dispositivo en el identificador de Entra de Microsoft, puede requerir que la aplicación sea multiinquilino. Para que la aplicación sea multiinquilino, vaya al panel Authentication (Autenticación) y, a continuación, seleccione Accounts in any organizational directory (Cuentas en cualquier directorio organizativo). En Treat application as a public client (Tratar la aplicación como un cliente público), seleccione Yes (Sí).

Autenticación de una cuenta de usuario con el flujo de código de dispositivo

En el siguiente ejemplo se muestra la autenticación del elemento SecretClient de la biblioteca cliente de secretos de Azure Key Vault para Java con la clase DeviceCodeCredential en un dispositivo IoT.

/**
 * Authenticate with device code credential.
 */
DeviceCodeCredential deviceCodeCredential = new DeviceCodeCredentialBuilder()
    .challengeConsumer(challenge -> {
    // Lets the user know about the challenge.
    System.out.println(challenge.getMessage());
    }).build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your Key Vault name>.vault.azure.net")
    .credential(deviceCodeCredential)
    .buildClient();

Credencial interactiva del explorador

Esta credencial autentica de forma interactiva a un usuario con el explorador del sistema predeterminado y ofrece una experiencia de autenticación sin problemas, ya que le permite usar sus propias credenciales para autenticar la aplicación.

Habilitación de aplicaciones para el flujo de OAuth 2 interactivo del explorador

Para usar InteractiveBrowserCredential, debe registrar una aplicación en microsoft Entra ID con permisos para iniciar sesión en nombre de un usuario. Siga los pasos anteriores para que el flujo de código del dispositivo registre la aplicación. Como se mencionó anteriormente, un administrador del inquilino debe conceder consentimiento a la aplicación antes de que cualquier cuenta de usuario pueda iniciar sesión.

Es posible que observe que en InteractiveBrowserCredentialBuilder se requiere una dirección URL de redireccionamiento. Agregue la dirección URL de redireccionamiento a la subsección URI de redirección en la sección Autenticación de la aplicación microsoft Entra registrada.

Autenticación de una cuenta de usuario de forma interactiva en el explorador

En el siguiente ejemplo se muestra la autenticación del elemento SecretClient de la biblioteca cliente azure-security-keyvault-secrets con la clase InteractiveBrowserCredential.

/**
 * Authenticate interactively in the browser.
 */
InteractiveBrowserCredential interactiveBrowserCredential = new InteractiveBrowserCredentialBuilder()
    .clientId("<your app client ID>")
    .redirectUrl("YOUR_APP_REGISTERED_REDIRECT_URL")
    .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your Key Vault name>.vault.azure.net")
    .credential(interactiveBrowserCredential)
    .buildClient();

Credencial de nombre de usuario y contraseña

El elemento UsernamePasswordCredential ayuda a autenticar una aplicación cliente pública con credenciales de usuario que no requieran autenticación multifactor. En el siguiente ejemplo se muestra la autenticación del elemento SecretClient de la biblioteca cliente azure-security-keyvault-secrets con la clase UsernamePasswordCredential. El usuario no debe tener activada la autenticación multifactor.

/**
 * Authenticate with username, password.
 */
UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder()
    .clientId("<your app client ID>")
    .username("<your username>")
    .password("<your password>")
    .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
    .vaultUrl("https://<your Key Vault name>.vault.azure.net")
    .credential(usernamePasswordCredential)
    .buildClient();

Para más información, consulte Plataforma de identidad de Microsoft y credenciales de contraseña de propietario de recursos de OAuth 2.0.

Pasos siguientes

En este artículo se ha tratado la autenticación con credenciales de usuario. Esta forma de autenticación es una de las varias maneras con las que puede autenticarse en Azure SDK para Java. En los siguientes artículos se describen otras maneras:

Si tiene problemas relacionados con la autenticación de credenciales de usuario, consulte Solución de problemas de autenticación de credenciales de usuario.

Después de conocer la autenticación, consulte Configuración del registro en Azure SDK para Java para obtener información sobre la funcionalidad de registro que proporciona el SDK.