Compartir a través de


Adición de autenticación solo de aplicación a aplicaciones Java para Microsoft Graph

En este artículo, agregará autenticación solo de aplicación a la aplicación que creó en Compilación de aplicaciones Java con Microsoft Graph y autenticación solo de aplicación.

La biblioteca cliente de Identidad de Azure para Java proporciona muchas TokenCredential clases que implementan flujos de token de OAuth2. El SDK de Microsoft Graph para Java usa esas clases para autenticar las llamadas a Microsoft Graph.

Configuración del cliente de Graph para la autenticación solo de la aplicación

En esta sección, usará la ClientSecretCredential clase para solicitar un token de acceso mediante el flujo de credenciales de cliente.

  1. Cree un nuevo archivo en el directorio ./app/src/main/java/graphapponlytutorial denominado Graph.java y agregue el código siguiente a ese archivo.

    package graphapponlytutorial;
    
    import java.util.Properties;
    
    import com.azure.core.credential.AccessToken;
    import com.azure.core.credential.TokenRequestContext;
    import com.azure.identity.ClientSecretCredential;
    import com.azure.identity.ClientSecretCredentialBuilder;
    import com.microsoft.graph.models.UserCollectionResponse;
    import com.microsoft.graph.serviceclient.GraphServiceClient;
    
  2. Agregue una definición de clase graph vacía.

    public class Graph {
    }
    
  3. Agregue el código siguiente a la clase Graph.

    private static Properties _properties;
    private static ClientSecretCredential _clientSecretCredential;
    private static GraphServiceClient _appClient;
    
    public static void initializeGraphForAppOnlyAuth(Properties properties) throws Exception {
        // Ensure properties isn't null
        if (properties == null) {
            throw new Exception("Properties cannot be null");
        }
    
        _properties = properties;
    
        if (_clientSecretCredential == null) {
            final String clientId = _properties.getProperty("app.clientId");
            final String tenantId = _properties.getProperty("app.tenantId");
            final String clientSecret = _properties.getProperty("app.clientSecret");
    
            _clientSecretCredential = new ClientSecretCredentialBuilder()
                .clientId(clientId)
                .tenantId(tenantId)
                .clientSecret(clientSecret)
                .build();
        }
    
        if (_appClient == null) {
            _appClient = new GraphServiceClient(_clientSecretCredential,
                    new String[] { "https://graph.microsoft.com/.default" });
        }
    }
    
  4. Reemplace la función vacía initializeGraph en App.java por lo siguiente.

    private static void initializeGraph(Properties properties) {
        try {
            Graph.initializeGraphForAppOnlyAuth(properties);
        } catch (Exception e)
        {
            System.out.println("Error initializing Graph for user auth");
            System.out.println(e.getMessage());
        }
    }
    

Este código declara dos propiedades privadas, un ClientSecretCredential objeto y un GraphServiceClient objeto . La initializeGraphForAppOnlyAuth función crea una nueva instancia de ClientSecretCredentialy, a continuación, usa esa instancia para crear una nueva instancia de GraphServiceClient. Cada vez que se realiza una llamada API a Microsoft Graph a través de _appClient, usa la credencial proporcionada para obtener un token de acceso.

Prueba de ClientSecretCredential

A continuación, agregue código para obtener un token de acceso de ClientSecretCredential.

  1. Agregue la siguiente función a la clase Graph.

    public static String getAppOnlyToken() throws Exception {
        // Ensure credential isn't null
        if (_clientSecretCredential == null) {
            throw new Exception("Graph has not been initialized for app-only auth");
        }
    
        // Request the .default scope as required by app-only auth
        final String[] graphScopes = new String[] {"https://graph.microsoft.com/.default"};
    
        final TokenRequestContext context = new TokenRequestContext();
        context.addScopes(graphScopes);
    
        final AccessToken token = _clientSecretCredential.getToken(context).block();
        return token.getToken();
    }
    
  2. Reemplace la función vacía displayAccessToken en App.java por lo siguiente.

    private static void displayAccessToken() {
        try {
            final String accessToken = Graph.getAppOnlyToken();
            System.out.println("Access token: " + accessToken);
        } catch (Exception e) {
            System.out.println("Error getting access token");
            System.out.println(e.getMessage());
        }
    }
    
  3. Compile y ejecute la aplicación. Escriba 1 cuando se le solicite una opción. La aplicación muestra un token de acceso.

    Java App-Only Graph Tutorial
    
    Please choose one of the following options:
    0. Exit
    1. Display access token
    2. List users
    3. Make a Graph call
    1
    App-only token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVDTzRYOWtKYlNLVjVkRzJGenJqd2xvVUcwWS...
    

    Sugerencia

    Solo con fines de validación y depuración, puede descodificar tokens de acceso de usuario (solo para cuentas profesionales o educativas) mediante el analizador de tokens en línea de Microsoft en https://jwt.ms. El análisis del token puede ser útil si se producen errores de token al llamar a Microsoft Graph. Por ejemplo, comprobar que la scp notificación del token contiene los ámbitos de permiso de Microsoft Graph esperados.

Paso siguiente