Compartir a través de


Protección de aplicaciones De Java WebSphere mediante grupos y notificaciones de grupo

En este artículo se muestra cómo crear una aplicación de WebSphere de Java que inicie sesión de usuarios con la Biblioteca de autenticación de Microsoft (MSAL) para Java. La aplicación también restringe el acceso a páginas basadas en la pertenencia a grupos de seguridad de Id. de Microsoft Entra.

En el diagrama siguiente se muestra la topología de la aplicación:

Diagrama que muestra la topología de la aplicación.

La aplicación cliente usa MSAL para Java (MSAL4J) para iniciar sesión de los usuarios en un inquilino de Microsoft Entra ID y obtener un token de identificador de Microsoft Entra ID. El token de identificador demuestra que un usuario se autentica con este inquilino. La aplicación protege sus rutas según el estado de autenticación del usuario y la pertenencia a grupos.

Para ver un vídeo que trata este escenario, consulte Implementación de la autorización en las aplicaciones mediante roles de aplicación, grupos de seguridad, ámbitos y roles de directorio.

Requisitos previos

  • JDK versión 8 o posterior
  • Maven 3
  • Un inquilino de Microsoft Entra ID. Para obtener más información, consulte Cómo obtener un inquilino de Microsoft Entra ID.
  • Una cuenta de usuario en su propio inquilino de Microsoft Entra ID.
  • Dos grupos de seguridad, GroupAdmin y GroupMember, que contienen los usuarios con los que quiere probar.

Recomendaciones

  • Cierta familiaridad con los Servlets de Java /Jakarta.
  • Cierta familiaridad con el terminal Linux/OSX o Windows PowerShell.
  • jwt.ms para inspeccionar los tokens.
  • Fiddler para supervisar la actividad de red y la solución de problemas.
  • Siga el blog de Microsoft Entra ID para mantenerse al día con los últimos desarrollos.

Configuración del ejemplo

En las secciones siguientes se muestra cómo configurar la aplicación de ejemplo.

Clonar o descargar el repositorio de ejemplo

Para clonar el ejemplo, abra una ventana de Bash y use el siguiente comando:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/3-Authorization-II/groups

Como alternativa, vaya al repositorio ms-identity-msal-java-samples y, a continuación, descárguelo como un archivo .zip y extráigalo en el disco duro.

Importante

Para evitar limitaciones de longitud de ruta de acceso de archivo en Windows, clone o extraiga el repositorio en un directorio cerca de la raíz del disco duro.

Registro de la aplicación de ejemplo con el inquilino de Microsoft Entra ID

Hay un proyecto en este ejemplo. En las secciones siguientes se muestra cómo registrar la aplicación mediante Azure Portal.

Elija el inquilino de Microsoft Entra ID donde desea crear las aplicaciones.

Para elegir el inquilino, siga estos pasos:

  1. Inicie sesión en Azure Portal.

  2. Si la cuenta está presente en más de un inquilino de Microsoft Entra ID, seleccione el perfil en la esquina de Azure Portal y, a continuación, seleccione Cambiar directorio para cambiar la sesión al inquilino de Microsoft Entra ID deseado.

Registrar la aplicación (java-servlet-webapp-groups)

En primer lugar, registre una nueva aplicación en Azure Portal siguiendo las instrucciones de Inicio rápido: Registro de una aplicación con el Plataforma de identidad de Microsoft.

A continuación, siga estos pasos para completar el registro:

  1. Vaya a la página de Registros de aplicaciones de la plataforma de identidad de Microsoft para desarrolladores.

  2. Seleccione Nuevo registro.

  3. En la página Registrar una aplicación que aparece, escriba la siguiente información de registro de la aplicación:

    • En la sección Nombre , escriba un nombre de aplicación significativo para mostrar a los usuarios de la aplicación; por ejemplo, java-servlet-webapp-groups.
    • En Tipos de cuenta admitidos, seleccione Solo las cuentas de este directorio organizativo.
    • En la sección URI de redirección, seleccione Web en el cuadro combinado y escriba el siguiente URI de redirección: http://localhost:8080/msal4j-servlet-groups/auth/redirect.
  4. Seleccione Registrar para crear la aplicación.

  5. En la página de registro de la aplicación, busque y copie el valor de id. de aplicación (cliente) para usarlo más adelante. Este valor se usa en el archivo o archivos de configuración de la aplicación.

  6. Seleccione Guardar para guardar los cambios.

  7. En la página de registro de la aplicación, seleccione Certificados y secretos en el panel de navegación para abrir la página donde puede generar secretos y cargar certificados.

  8. En la sección Secretos de cliente, seleccione Nuevo secreto de cliente.

  9. Escriba una descripción, por ejemplo, secreto de aplicación.

  10. Seleccione una de las duraciones disponibles: En 1 año, En 2 años o Nunca expira.

  11. Seleccione Agregar. Se muestra el valor generado.

  12. Copie y guarde el valor generado para usarlo en pasos posteriores. Necesita este valor para los archivos de configuración del código. Este valor no se muestra de nuevo y no se puede recuperar por ningún otro medio. Por lo tanto, asegúrese de guardarlo desde Azure Portal antes de navegar a cualquier otra pantalla o panel.

  13. En la página de registro de la aplicación, seleccione Permisos de API en el panel de navegación para abrir la página para agregar acceso a las API que necesita la aplicación.

  14. Seleccione Agregar permiso.

  15. Asegúrese de que la pestaña API de Microsoft esté seleccionada.

  16. En la sección API de Microsoft más usadas, seleccione Microsoft Graph.

  17. En la sección Permisos delegados, seleccione User.Read y GroupMember.Read.All en la lista. Si es necesario, utilice el cuadro de búsqueda.

  18. Seleccione Agregar permisos.

  19. GroupMember.Read.All requiere consentimiento del administrador, por lo que seleccione Conceder o revocar el consentimiento del administrador para {tenant}y, a continuación, seleccione cuando se le pregunte si desea conceder consentimiento para los permisos solicitados para todas las cuentas del inquilino. Debe ser administrador de inquilinos de Microsoft Entra ID para realizar esta acción.


Configuración de la aplicación (java-servlet-webapp-groups) para usar el registro de la aplicación

Siga estos pasos para configurar la aplicación:

Nota:

En los pasos siguientes, ClientID es igual Application ID que o AppId.

  1. Abra el proyecto en el IDE.

  2. Abra el archivo ./src/main/resources/authentication.properties .

  3. Busque la cadena {enter-your-tenant-id-here}. Reemplace el valor existente por el identificador de inquilino de Microsoft Entra si registró la aplicación con la opción Cuentas de este directorio organizativo.

  4. Busque la cadena {enter-your-client-id-here} y reemplace el valor existente por el identificador de aplicación o clientId de la java-servlet-webapp-groups aplicación copiada de Azure Portal.

  5. Busque la cadena {enter-your-client-secret-here} y reemplace el valor existente por el valor que guardó durante la creación de la java-servlet-webapp-groups aplicación, en Azure Portal.

Configurar grupos de seguridad

Tiene las siguientes opciones disponibles sobre cómo puede configurar aún más las aplicaciones para recibir la notificación de grupos:

Nota:

Para obtener el grupo samAccountName local o On Premises Group Security Identifier , en lugar del identificador de grupo, consulte la sección Requisitos previos para usar atributos de grupo sincronizados desde Active Directory en Configuración de notificaciones de grupo para aplicaciones mediante el identificador entra de Microsoft.

Configure la aplicación para recibir todos los grupos a los que está asignado el usuario que ha iniciado sesión, incluidos los grupos anidados.

Para configurar la aplicación, siga estos pasos:

  1. En la página de registro de la aplicación, seleccione Configuración de token en el panel de navegación para abrir la página donde puede configurar los tokens proporcionados por notificaciones emitidos en la aplicación.

  2. Seleccione Agregar notificación de grupos para abrir la pantalla Editar notificación de grupos.

  3. Seleccione Grupos de seguridad O todos los grupos (incluye listas de distribución pero no grupos asignados a la aplicación). Al elegir ambas opciones, se niega el efecto de la opción Grupos de seguridad.

  4. En la sección Id. , seleccione Id. de grupo. Esta selección hace que Microsoft Entra ID envíe el identificador de objeto de los grupos a los que se asigna el usuario en la notificación groups del token de identificador que recibe la aplicación después de iniciar sesión un usuario.

Configurar la aplicación para recibir los valores de notificación de grupos de un conjunto filtrado de grupos a los que se puede asignar un usuario

Esta opción es útil cuando se cumplen los siguientes casos:

  • La aplicación está interesada en un conjunto seleccionado de grupos a los que podría asignarse un usuario de inicio de sesión.
  • La aplicación no está interesada en todos los grupos de seguridad a los que está asignado este usuario en el inquilino.

Esta opción ayuda a la aplicación a evitar el problema de uso por encima del límite .

Nota:

Esta característica no está disponible en la edición Gratuita Microsoft Entra ID.

Las asignaciones de grupos anidadas no están disponibles cuando se usa esta opción.

Para habilitar esta opción en la aplicación, siga estos pasos:

  1. En la página de registro de la aplicación, seleccione Configuración de token en el panel de navegación para abrir la página donde puede configurar los tokens proporcionados por notificaciones emitidos en la aplicación.

  2. Seleccione Agregar notificación de grupos para abrir la pantalla Editar notificación de grupos.

  3. Seleccione Grupos asignados a la aplicación.

    Elegir otras opciones, como Grupos de seguridad o Todos los grupos (incluye listas de distribución pero no grupos asignados a la aplicación): niega las ventajas que la aplicación deriva de elegir usar esta opción.

  4. En la sección Id. , seleccione Id. de grupo. Esta selección da como resultado que Microsoft Entra ID envíe el identificador de objeto de los grupos a los que se asigna el usuario en la notificación groups del token de identificador.

  5. Si expone una API web mediante la opción Exponer una API , también puede elegir la opción Id. de grupo en la sección Acceso . Esta opción da como resultado que Microsoft Entra ID envíe el identificador de objeto de los grupos a los que se asigna el usuario en la notificación de grupos del token de acceso.

  6. En la página de registro de la aplicación, seleccione Información general en el panel de navegación para abrir la pantalla de información general de la aplicación.

  7. Seleccione el hipervínculo con el nombre de la aplicación en Aplicación administrada en el directorio local. Este título de campo se puede truncar; por ejemplo Managed application in ..., . Al seleccionar este vínculo, vaya a la página Información general de la aplicación empresarial asociada a la entidad de servicio de la aplicación en el inquilino donde lo creó. Para volver a la página de registro de la aplicación, use el botón Atrás del explorador.

  8. Seleccione Usuarios y grupos en el panel de navegación para abrir la página donde puede asignar usuarios y grupos a la aplicación.

  9. Seleccione Agregar usuario.

  10. Seleccione Usuario y Grupos en la pantalla resultante.

  11. Elija los grupos que desea asignar a esta aplicación.

  12. Seleccione Seleccionar para terminar de seleccionar los grupos.

  13. Seleccione Asignar para finalizar el proceso de asignación de grupos.

    La aplicación ahora recibe estos grupos seleccionados en la notificación groups cuando un usuario inicia sesión en la aplicación es miembro de uno o varios de estos grupos asignados.

  14. Seleccione Propiedades en el panel de navegación para abrir la página que muestra las propiedades básicas de la aplicación. Establezca la marca ¿Asignación de usuario necesaria? en .

Importante

Cuando se establece la asignación de usuarios necesaria? en , Microsoft Entra ID comprueba que solo los usuarios asignados a la aplicación en el panel Usuarios y grupos pueden iniciar sesión en la aplicación. Puede asignar usuarios directamente o asignando grupos de seguridad a los que pertenecen.

Configuración de la aplicación (java-servlet-webapp-groups) para reconocer identificadores de grupo

Siga estos pasos para configurar la aplicación:

Importante

En la página Configuración del token, si eligió alguna opción distinta de groupID , como DNSDomain\sAMAccountName , debe escribir el nombre del grupo en los pasos siguientes( por ejemplo, contoso.com\Test Group - en lugar del identificador de objeto:

  1. Abra el archivo ./src/main/resources/authentication.properties .

  2. Busque la cadena {enter-your-admins-group-id-here} y reemplace el valor existente por el identificador de objeto del GroupAdmin grupo, que copió de Azure Portal. Quite también las llaves del valor del marcador de posición.

  3. Busque la cadena {enter-your-users-group-id-here} y reemplace el valor existente por el identificador de objeto del GroupMember grupo, que copió de Azure Portal. Quite también las llaves del valor del marcador de posición.

Compilación del ejemplo

Para compilar el ejemplo mediante Maven, vaya al directorio que contiene el archivo pom.xml del ejemplo y, a continuación, ejecute el siguiente comando:

mvn clean package

Este comando genera un archivo .war que se puede ejecutar en varios servidores de aplicaciones.

Ejecución del ejemplo

En estas instrucciones se supone que instaló WebSphere y configuró un servidor. Puede usar las instrucciones de Implementación de un clúster de WebSphere Application Server (tradicional) en Azure Virtual Machines para una configuración básica del servidor.

Para poder realizar la implementación en WebSphere, siga estos pasos para realizar algunos cambios de configuración en el propio ejemplo y, a continuación, compilar o recompilar el paquete:

  1. Vaya al archivo authentication.properties de la aplicación y cambie el valor de app.homePage a la dirección URL del servidor y el número de puerto que planea usar, como se muestra en el ejemplo siguiente:

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<server-url>:<port-number>/msal4j-servlet-auth/
    
  2. Después de guardar este archivo, use el siguiente comando para volver a generar la aplicación:

    mvn clean package
    
  3. Una vez que el código termine de compilarse, copie el archivo .war en el sistema de archivos del servidor de destino.

También debe realizar el mismo cambio en el registro de aplicaciones de Azure, donde lo establezca en Azure Portal como valor URI de redirección en la pestaña Autenticación .

  1. Vaya a la página de Registros de aplicaciones de la plataforma de identidad de Microsoft para desarrolladores.

  2. Use el cuadro de búsqueda para buscar el registro de la aplicación; por ejemplo, java-servlet-webapp-authentication.

  3. Para abrir el registro de la aplicación, seleccione su nombre.

  4. Seleccione Autenticar desde el menú.

  5. En la sección URI de redirección web - , seleccione Agregar URI.

  6. Rellene el URI de la aplicación, anexando /auth/redirect ( por ejemplo, https://<server-url>:<port-number>/auth/redirect.

  7. Seleccione Guardar.

Siga estos pasos para implementar el ejemplo mediante la consola de soluciones integradas de WebSphere:

  1. En la pestaña Aplicaciones , seleccione Nueva aplicación y, a continuación , Nueva aplicación empresarial.

  2. Elija el archivo .war que ha compilado y, después, seleccione Siguiente hasta llegar al paso de instalación Asignar raíces de contexto para módulos web. La otra configuración predeterminada debe ser correcta.

  3. Para la raíz del contexto, establézcalo en el mismo valor que después del número de puerto en el "URI de redirección" establecido en configuración de ejemplo o registro de aplicaciones de Azure. Es decir, si el URI de redirección es http://<server-url>:9080/msal4j-servlet-auth/, la raíz del contexto debe ser msal4j-servlet-auth.

  4. Seleccione Finalizar.

  5. Una vez finalizada la instalación de la aplicación, vaya a la sección Aplicaciones empresariales de WebSphere de la pestaña Aplicaciones .

  6. Seleccione el archivo .war que instaló en la lista de aplicaciones y, a continuación, seleccione Iniciar para implementar.

  7. Una vez finalizada la implementación, vaya a http://<server-url>:9080/{whatever you set as the context root} y debería poder ver la aplicación.

Exploración del ejemplo

Siga estos pasos para explorar el ejemplo:

  1. Observe que el estado de inicio de sesión o de cierre de sesión se muestra en el centro de la pantalla.
  2. Seleccione el botón contextual en la esquina. Este botón lee Iniciar sesión cuando se ejecuta por primera vez la aplicación.
  3. En la página siguiente, siga las instrucciones e inicie sesión con una cuenta en el inquilino de Microsoft Entra ID.
  4. En la pantalla de consentimiento, observe los ámbitos que se solicitan.
  5. Observe que el botón contextual ahora indica Cerrar sesión y muestra el nombre de usuario.
  6. Seleccione Id. Token Details (Detalles del token de identificador) para ver algunas de las notificaciones descodificadas del token de identificador.
  7. Seleccione Grupos para ver cualquier información sobre la pertenencia a grupos de seguridad para el usuario que ha iniciado sesión.
  8. Seleccione Solo administrador o Usuario normal para acceder a los puntos de conexión protegidos de notificaciones de grupos.
    • Si el usuario que ha iniciado sesión está en el GroupAdmin grupo, el usuario puede escribir ambas páginas.
    • Si el usuario que ha iniciado sesión está en el GroupMember grupo, el usuario solo puede escribir la página Usuario normal.
    • Si el usuario que ha iniciado sesión no está en ninguno de los grupos, el usuario no puede acceder a ninguna de las dos páginas.
  9. Use el botón de la esquina para cerrar la sesión.
  10. Después de cerrar sesión, seleccione Id. Token Details (Detalles del token de identificador) para observar que la aplicación muestra un 401: unauthorized error en lugar de las notificaciones del token de identificador cuando el usuario no está autorizado.

Sobre el código

En este ejemplo se usa MSAL para Java (MSAL4J) para iniciar sesión un usuario y obtener un token de identificador que pueda contener la notificación de grupos. Si hay demasiados grupos para la emisión en el token de identificador, en el ejemplo se usa el SDK de Microsoft Graph para Java para obtener los datos de pertenencia a grupos de Microsoft Graph. En función de los grupos a los que pertenece el usuario, el usuario que ha iniciado sesión puede acceder a ninguna, una o ambas de las páginas protegidas Admins Only y Regular Users.

Si desea replicar el comportamiento de este ejemplo, debe agregar MSAL4J y el SDK de Microsoft Graph a los proyectos mediante Maven. Puede copiar el archivo pom.xml y el contenido de las carpetas auxiliares y authservlets en la carpeta src/main/java/com/microsoft/azuresamples/msal4j. También necesita el archivo authentication.properties . Estas clases y archivos contienen código genérico que puede usar en una amplia gama de aplicaciones. También puede copiar el resto del ejemplo, pero las demás clases y archivos se compilan específicamente para abordar el objetivo de este ejemplo.

Contenido

En la tabla siguiente se muestra el contenido de la carpeta del proyecto de ejemplo:

Archivo/carpeta Descripción
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Este directorio contiene las clases que definen la lógica empresarial de back-end de la aplicación.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Este directorio contiene las clases que se usan para los puntos de conexión de inicio de sesión y cierre de sesión.
____Servlet.java Todos los puntos de conexión disponibles se definen en .java clases que terminan en ____Servlet.java.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Clases auxiliares para la autenticación.
AuthenticationFilter.java Redirige las solicitudes no autenticadas a los puntos de conexión protegidos a una página 401.
src/main/resources/authentication.properties Microsoft Entra ID y configuración del programa.
src/main/webapp/ Este directorio contiene la interfaz de usuario: plantillas de JSP
CHANGELOG.md Lista de cambios en el ejemplo.
CONTRIBUTING.md Directrices para contribuir al ejemplo.
LICENCIA Licencia del ejemplo.

Procesamiento de una notificación de grupos en tokens, incluido el control del uso por encima del límite

En las secciones siguientes se describe cómo la aplicación procesa una notificación de grupos.

La notificación groups

El identificador de objeto de los grupos de seguridad del que es miembro el usuario que ha iniciado sesión se devuelve en la notificación groups del token, que se muestra en el ejemplo siguiente:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

Notificación de uso por encima del límite de grupos

Para asegurarse de que el tamaño del token no supera los límites de tamaño del encabezado HTTP, el Plataforma de identidad de Microsoft limita el número de identificadores de objeto que incluye en la notificación groups.

El límite de uso por encima del límite es 150 para tokens SAML, 200 para tokens JWT y 6 para aplicaciones de página única. Si un usuario es miembro de más grupos que el límite de uso por encima del límite, el Plataforma de identidad de Microsoft no emite los identificadores de grupo en la notificación groups del token. En su lugar, incluye una notificación de uso por encima del límite en el token que indica a la aplicación para consultar la API de Microsoft Graph para recuperar la pertenencia al grupo del usuario, como se muestra en el ejemplo siguiente:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Creación del escenario de uso por encima del límite en este ejemplo para las pruebas

Para crear el escenario de uso por encima del límite, puede seguir estos pasos:

  1. Puede usar el archivo BulkCreateGroups.ps1 proporcionado en la carpeta AppCreationScripts para crear un gran número de grupos y asignarles usuarios. Este archivo ayuda a probar escenarios de uso por encima del límite durante el desarrollo. Recuerde cambiar el proporcionado por objectId el usuario en el script BulkCreateGroups.ps1 .

  2. Al ejecutar este ejemplo y se produce un uso por encima del límite, verá en _claim_names la página principal después de que el usuario inicie sesión.

  3. Le recomendamos encarecidamente que use la característica de filtrado de grupos, si es posible, para evitar que se produzca un uso excesivo de grupos. Para obtener más información, consulte la sección Configuración de la aplicación para recibir los valores de notificación de grupos de un conjunto filtrado de grupos al que se puede asignar un usuario.

  4. En caso de que no pueda evitar el uso por encima del límite de grupo, le sugerimos que siga estos pasos para procesar la notificación de grupos en el token:

    1. Compruebe la notificación _claim_names con uno de los valores que se están agrupando. Esta notificación indica el uso por encima del límite.
    2. Si se encuentra, realice una llamada al punto de conexión especificado en _claim_sources para capturar los grupos del usuario.
    3. Si no se encuentra ninguno, examine la notificación de grupos para los grupos del usuario.

Nota:

Controlar el uso por encima del límite requiere una llamada a Microsoft Graph para leer las pertenencias a grupos del usuario que ha iniciado sesión, por lo que la aplicación debe tener el permiso GroupMember.Read.All para que la función getMemberObjects se ejecute correctamente.

Para obtener más información sobre la programación para Microsoft Graph, vea el vídeo Introducción a Microsoft Graph para desarrolladores.

ConfidentialClientApplication

Se crea una ConfidentialClientApplication instancia en el archivo AuthHelper.java , como se muestra en el ejemplo siguiente. Este objeto ayuda a crear la dirección URL de autorización de Microsoft Entra y también ayuda a intercambiar el token de autenticación de un token de acceso.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .build();

Los parámetros siguientes se usan para crear instancias:

  • Identificador de cliente de la aplicación.
  • Secreto de cliente, que es un requisito para aplicaciones cliente confidenciales.
  • Microsoft Entra ID Authority, que incluye el identificador de inquilino de Microsoft Entra.

En este ejemplo, estos valores se leen del archivo authentication.properties mediante un lector de propiedades en el archivo Config.java .

Tutorial paso a paso

Los pasos siguientes proporcionan un tutorial de la funcionalidad de la aplicación:

  1. El primer paso del proceso de inicio de sesión es enviar una solicitud al /authorize punto de conexión del inquilino de Microsoft Entra ID. La instancia de MSAL4J ConfidentialClientApplication se usa para construir una dirección URL de solicitud de autorización. La aplicación redirige el explorador a esta dirección URL, que es donde el usuario inicia sesión.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

    En la lista siguiente se describen las características de este código:

    • AuthorizationRequestUrlParameters: parámetros que se deben establecer para compilar una authorizationRequestUrl.
    • REDIRECT_URI: donde Microsoft Entra redirige el explorador , junto con el código de autenticación, después de recopilar las credenciales de usuario. Debe coincidir con el URI de redireccionamiento en el registro de la aplicación de Id. de Microsoft Entra en Azure Portal.
    • SCOPES: los ámbitos son permisos solicitados por la aplicación.
      • Normalmente, los tres ámbitos openid profile offline_access son suficientes para recibir una respuesta de token de identificador.
      • La lista completa de ámbitos solicitados por la aplicación se puede encontrar en el archivo authentication.properties . Puede agregar más ámbitos, como User.Read.
  2. Microsoft Entra ID presenta al usuario un mensaje de inicio de sesión. Si el intento de inicio de sesión se realiza correctamente, el explorador del usuario se redirige al punto de conexión de redireccionamiento de la aplicación. Una solicitud válida a este punto de conexión contiene un código de autorización.

  3. A continuación, la ConfidentialClientApplication instancia intercambia este código de autorización para un token de identificador y un token de acceso de Microsoft Entra ID.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).get();
    

    En la lista siguiente se describen las características de este código:

    • AuthorizationCodeParameters: parámetros que se deben establecer para intercambiar el código de autorización de un identificador o token de acceso.
    • authCode: el código de autorización que se recibió en el punto de conexión de redireccionamiento.
    • REDIRECT_URI: el URI de redirección usado en el paso anterior debe pasarse de nuevo.
    • SCOPES: los ámbitos usados en el paso anterior deben pasarse de nuevo.
  4. Si acquireToken se realiza correctamente, se extraen las notificaciones de token. Si se supera la comprobación de nonce, los resultados se colocan en ( una instancia de IdentityContextData ) y se guardan en context la sesión. A continuación, la aplicación puede crear una instancia IdentityContextData de desde la sesión mediante una instancia de IdentityContextAdapterServlet siempre que necesite acceso a ella, como se muestra en el código siguiente:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Después del paso anterior, puede extraer pertenencias a grupos mediante una llamada a context.getGroups() mediante una instancia de IdentityContextData.

  6. Si el usuario es miembro de demasiados grupos (más de 200), una llamada a context.getGroups() podría estar vacía si no es para la llamada a handleGroupsOverage(). Mientras tanto, context.getGroupsOverage() devuelve true, que indica que se ha producido un uso por encima del límite y que obtener la lista completa de grupos requiere una llamada a Microsoft Graph. Consulte el handleGroupsOverage() método en AuthHelper.java para ver cómo usa context.setGroups() esta aplicación cuando hay un uso por encima del límite.

Protección de las rutas

Consulte AuthenticationFilter.java para ver cómo la aplicación de ejemplo filtra el acceso a las rutas. En el archivo authentication.properties , la app.protect.authenticated propiedad contiene las rutas separadas por comas a las que solo pueden acceder los usuarios autenticados, como se muestra en el ejemplo siguiente:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

Cualquiera de las rutas enumeradas en los conjuntos de reglas separados por comas en app.protect.groups también están fuera de los límites de los usuarios autenticados no autenticados, como se muestra en el ejemplo siguiente. Sin embargo, estas rutas también contienen una lista separada por espacios de pertenencias a grupos. Solo los usuarios que pertenecen a al menos uno de los grupos correspondientes pueden acceder a estas rutas después de la autenticación.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Ámbitos

Los ámbitos indican a Microsoft Entra ID el nivel de acceso que solicita la aplicación.

En función de los ámbitos solicitados, Microsoft Entra ID presenta un diálogo de consentimiento al usuario al iniciar sesión. Si el usuario da su consentimiento a uno o varios ámbitos y obtiene un token, los ámbitos con consentimiento se codifican en el objeto resultante access_token.

Para los ámbitos solicitados por la aplicación, consulte authentication.properties. De forma predeterminada, la aplicación establece el valor de ámbitos en GroupMember.Read.All. Este ámbito concreto de La API de Microsoft Graph es necesario en caso de que la aplicación necesite llamar a Graph para obtener las pertenencias a grupos del usuario.

Información adicional

Paso siguiente

Implementación de aplicaciones de Java WebSphere en WebSphere tradicional en Azure Virtual Machines