Agregar inicio de sesión con una cuenta de Microsoft Entra a una aplicación web de Spring

En este artículo se muestra cómo desarrollar una aplicación web de Spring que admita el inicio de sesión por cuenta de Microsoft Entra. Después de finalizar todos los pasos de este artículo, la aplicación web le redirigirá a la página de inicio de sesión de Microsoft Entra cuando se acceda de forma anónima. En la captura de pantalla siguiente se muestra la página de inicio de sesión de Microsoft Entra:

Screenshot of application 'Sign in' dialog.

Requisitos previos

Los siguientes requisitos previos son necesarios para seguir los pasos descritos en este artículo:

Importante

Se requiere Spring Boot versión 2.5 o posterior para completar los pasos descritos en este artículo.

Creación de una aplicación con Spring Initialzr

  1. Vaya a https://start.spring.io/.

  2. Especifique que quiere generar un proyecto de Maven con Java, escriba los nombres de Group (Grupo) y Artifact (Artefacto) de su aplicación.

  3. Agregue dependencias para Spring Web, Microsoft Entra ID y OAuth2 Client.

  4. En la parte inferior de la página, seleccione el botón GENERATE (Generar).

    Screenshot of Spring Initializr with basic options.

  5. Cuando se le solicite, descargue el proyecto en una ruta de acceso del equipo local.

Creación de una instancia de Microsoft Entra

Creación de la instancia de Active Directory

Si es el administrador de una instancia existente, puede omitir este proceso.

  1. Inicie sesión en https://portal.azure.com.

  2. Seleccione Todos los servicios, Identidad y, después , Microsoft Entra ID.

  3. Rellene los campos Nombre de la organización y Nombre de dominio inicial. Copie la dirección URL completa del directorio. Usará la dirección URL para agregar cuentas de usuario más adelante en este tutorial. (Por ejemplo, azuresampledirectory.onmicrosoft.com).

    Copie la dirección URL completa del directorio. Usará la dirección URL para agregar cuentas de usuario más adelante en este tutorial. (Por ejemplo: azuresampledirectory.onmicrosoft.com).

    Cuando haya terminado, seleccione Crear. La creación de los recursos tardará unos minutos.

    Screenshot of the Configuration section of the Microsoft Entra ID 'Create a tenant' screen.

  4. Cuando haya terminado, seleccione el vínculo que se muestra para acceder al nuevo directorio.

    Screenshot of 'Create a tenant' success message.

  5. Copie el Id. de inquilino. Utilizará el valor del identificador para configurar el archivo application.properties más adelante en este tutorial.

    Screenshot of Microsoft Entra tenant screen with 'Tenant ID' highlighted.

Adición de un registro de aplicación para la aplicación de Spring Boot

  1. En el menú del portal, seleccione Registros de aplicaciones y, a continuación, seleccione Registrar una aplicación.

  2. Especifique la aplicación y, a continuación, seleccione Registrar.

  3. Cuando aparezca la página del registro de aplicaciones, copie los valores de Id. de aplicación (cliente) y de Id. de directorio (inquilino). Usará estos valores para configurar el archivo application.properties más adelante en este tutorial.

    Screenshot of application with 'Application (client) ID' and 'Directory (tenant) ID' highlighted.

  4. En el panel de navegación izquierdo, seleccione Certificados y secretos. A continuación, seleccione Nuevo secreto de cliente.

    Screenshot of application 'Certificates & secrets' screen with 'New client secret' highlighted.

  5. Agregue una Descripción y seleccione la duración en la lista Expiración. Seleccione Agregar. El valor de la clave se rellenará automáticamente.

  6. Copie y guarde el valor del secreto de cliente para configurar el archivo application.properties más adelante en este tutorial. (No podrá recuperar este valor más adelante).

    Screenshot of application with new client secret highlighted.

  7. En la página principal del registro de la aplicación, seleccione Autenticación y seleccione Agregar una plataforma. Después, seleccione Aplicaciones web.

    Screenshot of application Authentication screen with 'Configure platforms' section showing and Web platform highlighted.

  8. Escriba http://localhost:8080/login/oauth2/code/ como un nuevo valor de URI de redirección y, a continuación, seleccione Configurar.

    Screenshot of application Authentication screen with 'Configure Web' section showing and 'Redirect URIs' highlighted.

  9. Si ha modificado el archivo de pom.xml para usar una versión de inicio de Microsoft Entra anterior a la 3.0.0: en Concesión implícita y flujos híbridos, seleccione Tokens de identificador (usados para flujos implícitos e híbridos), seleccione Guardar.

    Screenshot of application Authentication screen with 'ID tokens' selected.

Adición de una cuenta de usuario al directorio y adición de esa cuenta a un appRole

  1. En la página Información general de Active Directory, seleccione Usuarios y, a continuación, seleccione Nuevo usuario.

  2. Cuando se muestre el panel Usuario, especifique los valores de Nombre de usuario y Nombre. Seleccione Crear.

    Screenshot of 'New user' dialog.

    Nota:

    Al escribir el nombre de usuario, debe especificar la dirección URL del directorio que usamos anteriormente en este tutorial. Por ejemplo:

    test-user@azuresampledirectory.onmicrosoft.com

  3. En la página principal del registro de la aplicación, seleccione Roles de la aplicación y después Create app role (Crear rol de la aplicación). Proporcione valores para los campos del formulario, seleccione ¿Desea habilitar este rol de aplicación? y, después, seleccione Aplicar.

    Screenshot of application 'App roles' screen with 'Create app role' pane showing.

  4. En la página Información general del directorio De Microsoft Entra, seleccione Aplicaciones empresariales.

    Screenshot of Microsoft Entra ID 'Enterprise applications' screen.

  5. Seleccione Todas las aplicaciones y, después, seleccione la aplicación a la que agregó el rol de aplicación en un paso anterior.

    Screenshot of 'Enterprise applications' screen with 'All applications' list showing.

  6. Seleccione Usuarios y grupos y, luego, Agregar usuario o grupo.

  7. En Usuarios, seleccione Ninguno seleccionado. Seleccione el usuario que creó anteriormente, seleccione Seleccionar y, después, Asignar. Si creó más de un rol de aplicación anteriormente, seleccione uno de ellos.

    Screenshot of application 'Add Assignment' screen with Users pane showing.

  8. Vuelva al panel Usuarios, seleccione el usuario de prueba, seleccione Restablecer contraseña y copie la contraseña. Usará la contraseña al iniciar sesión en la aplicación más adelante en este tutorial.

    Screenshot of user with 'Temporary password' field highlighted.

Configuración y compilación de la aplicación

  1. Extraiga los archivos del proyecto que creó y descargó en un directorio anteriormente en este tutorial.

  2. Vaya a la carpeta src/main/resources del proyecto y abra el archivo application.properties en un editor de texto.

  3. Especifique la configuración del registro de aplicación con los valores que creó anteriormente. Por ejemplo:

    # Enable related features.
    spring.cloud.azure.active-directory.enabled=true
    # Specifies your Active Directory ID:
    spring.cloud.azure.active-directory.profile.tenant-id=22222222-2222-2222-2222-222222222222
    # Specifies your App Registration's Application ID:
    spring.cloud.azure.active-directory.credential.client-id=11111111-1111-1111-1111-1111111111111111
    # Specifies your App Registration's secret key:
    spring.cloud.azure.active-directory.credential.client-secret=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Donde:

    Parámetro Descripción
    spring.cloud.azure.active-directory.enabled Habilitación de las características proporcionadas por spring-cloud-azure-starter-active-directory
    spring.cloud.azure.active-directory.profile.tenant-id Contiene su Id. de directorio de Active Directory obtenido anteriormente.
    spring.cloud.azure.active-directory.credential.client-id Contiene el Id. de aplicación del registro de aplicaciones que completó anteriormente.
    spring.cloud.azure.active-directory.credential.client-secret Contiene el Valor de la clave del registro de aplicaciones que completó anteriormente.
  4. Guarde y cierre el archivo application.properties.

  5. Cree una carpeta llamada controller en la carpeta de fuentes de Java de la aplicación. Por ejemplo: src/main/java/com/wingtiptoys/security/controller.

  6. Cree un archivo de Java nuevo llamado HelloController.java en la carpeta controller y ábralo en un editor de texto.

  7. Escriba el código siguiente, guarde el archivo y ciérrelo:

    package com.wingtiptoys.security;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.security.access.prepost.PreAuthorize;
    
    @RestController
    public class HelloController {
         @GetMapping("Admin")
         @ResponseBody
         @PreAuthorize("hasAuthority('APPROLE_Admin')")
         public String Admin() {
             return "Admin message";
         }
    }
    

Compilación y prueba de la aplicación

  1. Abra un símbolo del sistema y cambie el directorio a la carpeta donde se encuentra el archivo pom.xml de su aplicación.

  2. Compile la aplicación de Spring Boot con Maven y ejecútela. Por ejemplo:

    mvn clean package
    mvn spring-boot:run
    

    Screenshot of Maven build output.

  3. Después de que Maven haya compilado e iniciado la aplicación, abra http://localhost:8080/Admin en un explorador web. Se le pedirá el nombre de usuario y la contraseña.

    Screenshot of application 'Sign in' dialog.

    Nota:

    Se le pedirá que cambie su contraseña si es el primer inicio de sesión de una cuenta de usuario nueva.

    Screenshot of application 'Update your password' dialog.

  4. Cuando haya iniciado sesión correctamente, verá ver el texto de ejemplo "Admin message" (Mensaje del administrador) desde el controlador.

    Screenshot of application admin message.

Resumen

En este tutorial, creó una nueva aplicación web de Java con Microsoft Entra Starter, configuró un nuevo inquilino de Microsoft Entra, registró una nueva aplicación en el inquilino y, a continuación, configuró la aplicación para usar las anotaciones y clases de Spring para proteger la aplicación web.

Consulte también

Pasos siguientes

Para más información acerca de Spring y Azure, vaya al centro de documentación de Azure.