Inicio rápido: Adquisición de un token y llamada a Microsoft Graph API desde una aplicación de consola de Java mediante la identidad de la aplicación
¡Bienvenido! Probablemente esta no sea la página que esperaba. Mientras trabajamos en una corrección, este vínculo debería llevarle al artículo correcto:
Lamentamos las molestias y agradecemos su paciencia mientras trabajamos para resolverlo.
En este inicio rápido descargará y ejecutará un código de ejemplo que muestra cómo puede obtener una aplicación de Java un token de acceso mediante la identidad de la aplicación para llamar a Microsoft Graph API y mostrar una lista de usuarios en el directorio. En el ejemplo de código se muestra cómo se puede ejecutar un trabajo desatendido o un servicio de Windows con una identidad de aplicación, en lugar de la identidad de un usuario.
Requisitos previos
Para ejecutar esta muestra, necesita:
- Kit de desarrollo de Java (JDK) 8 o posterior
- Maven
Descarga y configuración de la aplicación de inicio rápido
Paso 1: Configuración de la aplicación en Azure Portal
Para que el ejemplo de código de esta guía de inicio rápido funcione, debe crear un secreto de cliente y agregar el permiso de aplicación User.Read.All de Graph API.
La aplicación está configurada con estos atributos.
Paso 2: Descarga del proyecto de Java
Nota:
Enter_the_Supported_Account_Info_Here
Paso 3: Consentimiento de administrador
Si intenta ejecutar la aplicación en este momento, recibirá un error HTTP 403 - Prohibido: Insufficient privileges to complete the operation
. Este error se produce porque cualquier permiso de solo aplicación requiere el consentimiento del administrador: un administrador de aplicaciones en la nube del directorio debe dar su consentimiento a la aplicación. Seleccione una de las opciones siguientes según el rol:
Administrador de aplicaciones en la nube
Si es administrador de aplicaciones en la nube del inquilino, vaya a página Permisos de API seleccione Conceder consentimiento del administrador para Enter_the_Tenant_Name_Here.
Usuario estándar
Si es usuario estándar de su inquilino, debe pedir a un Administrador de aplicaciones en la nube que conceda consentimiento del administrador para su aplicación. Para ello, proporcione la siguiente dirección URL a su administrador:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
Paso 4: Ejecución de la aplicación
Puede probar el ejemplo directamente mediante la ejecución del método main de ClientCredentialGrant.Java desde el IDE.
Desde el shell o la línea de comandos, ejecute:
$ mvn clean compile assembly:single
Se generará el archivo msal-client-credential-secret-1.0.0.jar en el directorio /targets. Ejecútelo con el archivo ejecutable de Java como se indica a continuación:
$ java -jar msal-client-credential-secret-1.0.0.jar
Después de la ejecución, la aplicación debe mostrar la lista de usuarios del inquilino configurado.
Importante
Esta aplicación de inicio rápido usa un secreto de cliente para identificarse como cliente confidencial. Como el secreto de cliente se agrega como texto sin formato a los archivos del proyecto, por motivos de seguridad, se recomienda que use un certificado en lugar de un secreto de cliente antes de considerar el uso de la aplicación en producción. Para más información sobre cómo usar un certificado, consulte estas instrucciones en el mismo repositorio de GitHub que este ejemplo, pero en la segunda carpeta, msal-client-credential-certificate.
Más información
Java de MSAL
MSAL para Java es la biblioteca que se usa para iniciar la sesión de los usuarios y solicitar los tokens que se usan para acceder a una API protegida por la Plataforma de identidad de Microsoft. Como se ha descrito, en este inicio rápido se solicitan tokens mediante la propia identidad de la aplicación, en lugar de permisos delegados. El flujo de autenticación usado en este caso se conoce como flujo de OAuth de credenciales de cliente . Para más información sobre cómo usar MSAL para Java con aplicaciones de demonio, consulte este artículo.
Agregue MSAL4J a la aplicación con Maven o Gradle para administrar las dependencias al realizar los cambios siguientes en el archivo pom.xml (Maven) o build.gradle (Gradle) de la aplicación.
En pom.xml:
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>msal4j</artifactId>
<version>1.0.0</version>
</dependency>
En build.gradle:
compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'
Inicialización de MSAL
Para agregar una referencia a MSAL for Java, incorpore el código siguiente al principio del archivo en el que va a usar MSAL4J:
import com.microsoft.aad.msal4j.*;
A continuación, realice la inicialización de MSAL con el siguiente código:
IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);
ConfidentialClientApplication cca =
ConfidentialClientApplication
.builder(CLIENT_ID, credential)
.authority(AUTHORITY)
.build();
Donde: Descripción CLIENT_SECRET
Es el secreto de cliente creado para la aplicación en Azure Portal. CLIENT_ID
Es el Identificador de aplicación (cliente) de la aplicación registrada en Azure Portal. Puede encontrar este valor en la página Información general de la aplicación en Azure Portal. AUTHORITY
El punto de conexión STS para el usuario que se autenticará. Normalmente https://login.microsoftonline.com/{tenant}
en la nube pública, donde {tenant} es el nombre o el identificador del inquilino.
Solicitud de tokens
Para solicitar un token mediante la identidad de la aplicación, use el método acquireToken
:
IAuthenticationResult result;
try {
SilentParameters silentParameters =
SilentParameters
.builder(SCOPE)
.build();
// try to acquire token silently. This call will fail since the token cache does not
// have a token for the application you are requesting an access token for
result = cca.acquireTokenSilently(silentParameters).join();
} catch (Exception ex) {
if (ex.getCause() instanceof MsalException) {
ClientCredentialParameters parameters =
ClientCredentialParameters
.builder(SCOPE)
.build();
// Try to acquire a token. If successful, you should see
// the token information printed out to console
result = cca.acquireToken(parameters).join();
} else {
// Handle other exceptions accordingly
throw ex;
}
}
return result;
Donde: Descripción SCOPE
Contiene los ámbitos solicitados. Con clientes confidenciales se debe usar un formato similar a {Application ID URI}/.default
para indicar que los ámbitos que se solicitan son los definidos estáticamente en el objeto de aplicación establecido en Azure Portal (con Microsoft Graph,{Application ID URI}
apunta ahttps://graph.microsoft.com
). Con API web personalizadas,{Application ID URI}
se define en la sección Exponer una API en Registros de aplicaciones de Azure Portal.
Ayuda y soporte técnico
Si necesita ayuda, desea informar de un problema o desea obtener información sobre las opciones de soporte técnico, consulte Opciones de ayuda y soporte técnico para desarrolladores.
Pasos siguientes
Para más información sobre las aplicaciones demonio, consulte la página de aterrizaje del escenario.