Esdeveniment
Crear aplicacions i agents d'IA
17 de març, 21 - 21 de març, 10
Uneix-te a la sèrie de trobades per crear solucions d'IA escalables basades en casos d'ús del món real amb altres desenvolupadors i experts.
Registreu-vos-hi araAquest navegador ja no s’admet.
Feu l’actualització al Microsoft Edge per aprofitar les característiques més recents, les actualitzacions de seguretat i l’assistència tècnica.
En este artículo se muestra una aplicación Servlet de Java que autentica a los usuarios en Azure Active Directory B2C (Azure AD B2C) mediante la Biblioteca de autenticación de Microsoft para Java (MSAL4J).
En el siguiente diagrama se muestra la topología de la aplicación:
La aplicación usa MSAL4J para iniciar sesión de los usuarios y obtener un token de identificador de Azure AD B2C. El token de identificador demuestra que el usuario se autentica en un inquilino de Azure AD B2C.
En las secciones siguientes se muestra cómo configurar la aplicación 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/1-Authentication/sign-in-b2c
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.
Important
Para evitar las limitaciones de longitud de la ruta de los archivos en Windows, clone o extraiga el repositorio en un directorio cerca de la raíz del disco duro.
El ejemplo incluye una aplicación registrada previamente con fines de prueba. Si desea usar su propio inquilino y aplicación de Azure AD B2C, siga los pasos descritos en las secciones siguientes para registrar y configurar la aplicación en Azure Portal. De lo contrario, continúe con los pasos para Ejecutar el ejemplo.
Para elegir el inquilino, siga estos pasos:
Inicie sesión en Azure Portal.
Si su cuenta existe en más de un inquilino de Azure AD B2C, seleccione su perfil en la esquina de Azure Portal y seleccione Cambiar directorio para cambiar la sesión al inquilino de Azure AD B2C deseado.
Para crear flujos de usuario comunes como registro, inicio de sesión, edición de perfiles y restablecimiento de contraseña, consulte Tutorial: Creación de flujos de usuario en Azure Active Directory B2C.
Sin embargo, debe considerar la posibilidad de crear directivas personalizadas en Azure Active Directory B2C, pero esto está fuera del ámbito de este tutorial.
Consulte Tutorial: Adición de proveedores de identidades a las aplicaciones en Azure Active Directory B2C
Para registrar la aplicación, siga estos pasos:
Vaya a Azure Portal y seleccione Azure AD B2C.
Seleccione Registros de aplicaciones en el panel de navegación y, a continuación, seleccione Nuevo registro.
En la página Registrar una aplicación que aparece, escriba la siguiente información de registro de la aplicación:
ms-identity-b2c-java-servlet-webapp-authentication
.http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_redirect
.Seleccione Registrar para crear la aplicación.
En la página de registro de la aplicación, busque y copie el valor del identificador de la aplicación (cliente) para usarlo más adelante. Este valor se usa en el archivo o los archivos de configuración de la aplicación.
Seleccione Guardar para guardar los cambios.
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.
En la sección Secretos de cliente, seleccione Nuevo secreto de cliente.
Escriba una descripción, por ejemplo, secreto de aplicación.
Seleccione una de las duraciones disponibles: En 1 año, En 2 años o No caduca nunca.
Seleccione Agregar. Se muestra el valor generado.
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 volverá a aparecer y no podrá recuperarlo por ningún otro medio. Por lo tanto, asegúrese de guardarlo desde Azure Portal antes de navegar a cualquier otra pantalla o panel.
Siga estos pasos para configurar la aplicación:
Nota
En los pasos siguientes, ClientID
es igual que Application ID
o AppId
.
Abra el proyecto en su IDE.
Abra el archivo ./src/main/resources/authentication.properties.
Busque la propiedad aad.clientId
y reemplace el valor existente por el identificador de aplicación o clientId
de la aplicación ms-identity-b2c-java-servlet-webapp-authentication
de Azure Portal.
Busque la propiedad aad.secret
y reemplace el valor existente por el valor que guardó durante la creación de la aplicación ms-identity-b2c-java-servlet-webapp-authentication
desde Azure Portal.
Busque la propiedad aad.scopes
y reemplace el clientId de aplicación existente por el valor que colocó en aad.clientId
en el paso 1 de esta sección.
Busque la propiedad aad.authority
y reemplace la primera instancia de fabrikamb2c
por el nombre del inquilino de Azure AD B2C en el que creó la aplicación ms-identity-b2c-java-servlet-webapp-authentication
en Azure Portal.
Busque la propiedad aad.authority
y reemplace la segunda instancia de fabrikamb2c
por el nombre del inquilino de Azure AD B2C en el que creó la aplicación ms-identity-b2c-java-servlet-webapp-authentication
en Azure Portal.
Busque la propiedad aad.signInPolicy
y reemplácela por el nombre de la directiva de flujo de usuario de registro o inicio de sesión que creó en el inquilino de Azure AD B2C en el que creó la aplicación ms-identity-b2c-java-servlet-webapp-authentication
en Azure Portal.
Busque la propiedad aad.passwordResetPolicy
y reemplácela por el nombre de la directiva de flujo de usuario de restablecimiento de contraseña que creó en el inquilino de Azure AD B2C en el que creó la aplicación ms-identity-b2c-java-servlet-webapp-authentication
en Azure Portal.
Busque la propiedad aad.editProfilePolicy
y reemplácela por el nombre de la directiva de flujo de usuario de perfil de edición que creó en el inquilino de Azure AD B2C en el que creó la aplicación ms-identity-b2c-java-servlet-webapp-authentication
en Azure Portal.
Para crear 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.
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, compile o vuelva a compilar el paquete:
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 tiene previsto 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/
Después de guardar este archivo, use el siguiente comando para volver a compilar la aplicación:
mvn clean package
Una vez que el código termine de compilarse, copie el archivo .war del sistema de archivos del servidor de destino.
También debe realizar el mismo cambio en el registro de aplicaciones de Azure, donde lo estableció en Azure Portal como valor URI de redirección en la pestaña Autenticación.
Vaya a la página de Registros de aplicaciones de la plataforma de identidad de Microsoft para desarrolladores.
Use el recuadro de búsqueda para buscar el registro de la aplicación; por ejemplo, java-servlet-webapp-authentication
.
Para abrir el registro de la aplicación, seleccione el nombre.
Seleccione Autenticar desde el menú.
En la sección Web - URIs de redireccionamiento, seleccione Agregar URI.
Rellene el URI de la aplicación, anexando /auth/redirect, por ejemplo, https://<server-url>:<port-number>/auth/redirect
.
Seleccione Guardar.
Siga estos pasos para implementar el ejemplo mediante la consola de soluciones integradas de WebSphere:
En la pestaña Aplicaciones, seleccione Nueva aplicación y, a continuación, Nueva aplicación empresarial.
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.
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 la 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
.
Seleccione Finalizar.
Una vez finalizada la instalación de la aplicación, vaya a la sección Aplicaciones empresariales de WebSphere de la pestaña Aplicaciones.
Seleccione el archivo .war que instaló de la lista de aplicaciones y, a continuación, seleccione Iniciar para implementar.
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.
Siga estos pasos para explorar el ejemplo:
http://localhost:8080/ms-identity-b2c-java-servlet-webapp-authentication/auth_token_details
. Aquí puede observar cómo la aplicación muestra un error 401: unauthorized
en lugar de las notificaciones del token de identificador.En este ejemplo se muestra cómo usar MSAL4J para iniciar sesión de los usuarios en el inquilino de Azure AD B2C.
En la tabla siguiente se muestra el contenido de la carpeta del proyecto de ejemplo:
Archivo/carpeta | Descripción |
---|---|
AuthHelper.java | Funciones auxiliares para la autenticación. |
Config.java | Se ejecuta en el inicio y configura el lector y registrador de propiedades. |
authentication.properties | Microsoft Entra ID y configuración del programa. |
AuthenticationFilter.java | Redirige las solicitudes no autenticadas a los recursos protegidos a una página 401. |
MsalAuthSession | Se instancia con un HttpSession . Almacena todos los atributos de sesión relacionados con MSAL en el atributo de sesión. |
*Servlet.java | Todos los puntos de conexión disponibles se definen en clases de Java con nombres que terminan en Servlet. . |
CHANGELOG.md | Lista de cambios en la muestra. |
CONTRIBUTING.md | Directrices para contribuir al ejemplo. |
LICENCIA | Licencia del ejemplo. |
Se crea una instancia de ConfidentialClientApplication
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 Azure AD B2C y también ayuda a intercambiar el token de autenticación para un token de acceso.
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.b2cAuthority(AUTHORITY + policy)
.build();
Para la instanciación se utilizan los siguientes parámetros:
UserFlowPolicy
adecuado para el registro, el inicio de sesión, la edición de perfiles o el restablecimiento de contraseña.En este ejemplo, estos valores se leen del archivo authentication.properties mediante un lector de propiedades del archivo Config.java.
Los pasos siguientes proporcionan un tutorial de la funcionalidad de la aplicación:
El primer paso del proceso de inicio de sesión consiste en enviar una solicitud al punto de conexión /authorize
del inquilino de Azure Active Directory B2C. La instancia ConfidentialClientApplication
de MSAL4J se usa para construir una dirección URL de solicitud de autorización y la aplicación redirige el explorador a esta dirección URL, como se muestra en el ejemplo siguiente:
final ConfidentialClientApplication client = getConfidentialClientInstance(policy);
final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters
.builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY)
.prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString();
Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl);
resp.setStatus(302);
resp.sendRedirect(redirectUrl);
En la lista siguiente se describen las características de este código:
AuthorizationRequestUrlParameters
: parámetros que se deben establecer para crear una instancia de AuthorizationRequestUrl.
REDIRECT_URI
: donde Azure AD B2C redirige el explorador (junto con el código de autenticación) después de recopilar las credenciales de usuario.
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. Sin embargo, MSAL4J requiere que todas las respuestas de Azure AD B2C también contengan un token de acceso.
Para que Azure AD B2C prescinda de un token de acceso, así como un token de identificador, la solicitud debe incluir un ámbito de recursos adicional. Dado que esta aplicación no requiere realmente un ámbito de recursos externos, agrega su propio identificador de cliente como cuarto ámbito para recibir un token de acceso.
Puede encontrar una lista completa de ámbitos solicitados por la aplicación en el archivo authentication.properties.
ResponseMode.QUERY
: Azure AD B2C puede devolver la respuesta como parámetros de formulario en una solicitud HTTP POST o como parámetros de cadena de consulta en una solicitud HTTP GET.
Prompt.SELECT_ACCOUNT
: Azure AD B2C debe pedir al usuario que seleccione la cuenta con la que pretende autenticarse.
state
: una variable única establecida por la aplicación en la sesión en cada solicitud de token y destruida después de recibir la devolución de llamada de redirección de redirección de Azure AD B2C correspondiente. La variable de estado garantiza que las solicitudes de Azure AD B2C a /auth_redirect endpoint
son realmente de solicitudes de autorización de Azure AD B2C procedentes de esta aplicación y esta sesión, lo que impide ataques CSRF. Esto se hace en el archivo AADRedirectServlet.java.
nonce
: una variable única establecida por la aplicación en la sesión en cada solicitud de token y destruida después de recibir el token correspondiente. Este nonce se transcribe a los tokens resultantes dispensados de Azure AD B2C, lo que garantiza que no se produzca ningún ataque de reproducción de tokens.
Azure Active Directory B2C presenta al usuario un mensaje de inicio de sesión. Si el intento de inicio de sesión es correcto, el navegador del usuario se vuelve a redirigir al punto de conexión de redirección de la aplicación. Una solicitud válida a este punto de conexión contendrá un código de autorización.
A continuación, la instancia ConfidentialClientApplication
intercambia este código de autorización para un token de identificador y un token de acceso de Azure Active Directory B2C, como se muestra en el ejemplo siguiente:
final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
.builder(authCode, new URI(REDIRECT_URI))
.scopes(Collections.singleton(SCOPES)).build();
final ConfidentialClientApplication client = AuthHelper
.getConfidentialClientInstance(policy);
final Future<IAuthenticationResult> future = client.acquireToken(authParams);
final IAuthenticationResult result = future.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 por un identificador o token de acceso.authCode
: el código de autorización que se ha recibido en el punto de conexión de redireccionamiento.REDIRECT_URI
: el URI de redireccionamiento que se ha usado en el paso anterior se debe pasar de nuevo.SCOPES
: los ámbitos que se han usado en el paso anterior se deben pasar de nuevo.Si acquireToken
se ejecuta correctamente, las notificaciones del token se extraen y la notificación nonce se valida con el nonce almacenado en la sesión, como se muestra en el ejemplo siguiente:
parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache);
validateNonce(msalAuth)
processSuccessfulAuthentication(msalAuth);
Si nonce se valida correctamente, el estado de autenticación se coloca en una sesión del lado servidor, aprovechando los métodos expuestos por la clase MsalAuthSession
, como se muestra en el ejemplo siguiente:
msalAuth.setAuthenticated(true);
msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
Para obtener más información sobre cómo funcionan los protocolos de OAuth 2.0 en este escenario y otros escenarios, vea Escenarios de autenticación para Microsoft Entra ID.
Implementación de aplicaciones de Java WebSphere en WebSphere tradicional en Azure Virtual Machines
Esdeveniment
Crear aplicacions i agents d'IA
17 de març, 21 - 21 de març, 10
Uneix-te a la sèrie de trobades per crear solucions d'IA escalables basades en casos d'ús del món real amb altres desenvolupadors i experts.
Registreu-vos-hi araFormació
Mòdul
Inicio de sesión de usuarios con Microsoft Entra ID en una aplicación web de Java - Training
Obtenga información sobre cómo autenticar usuarios con Microsoft Entra ID y obtener acceso autorizado a los datos en una aplicación web de Java mediante la Biblioteca de autenticación de Microsoft.
Certificació
Microsoft Certified: Identity and Access Administrator Associate - Certifications
Muestre las características de Microsoft Entra ID para modernizar las soluciones de identidad, implementar soluciones híbridas e implementar la gobernanza de identidades.