Compartir a través de


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

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

El módulo de cliente de identidad de Azure para Go proporciona muchas TokenCredential clases que implementan flujos de token de OAuth2. El SDK de Microsoft Graph para Go 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. Agregue la siguiente función a ./graphhelper/graphhelper.go.

    func (g *GraphHelper) InitializeGraphForAppAuth() error {
        clientId := os.Getenv("CLIENT_ID")
        tenantId := os.Getenv("TENANT_ID")
        clientSecret := os.Getenv("CLIENT_SECRET")
        credential, err := azidentity.NewClientSecretCredential(tenantId, clientId, clientSecret, nil)
        if err != nil {
            return err
        }
    
        g.clientSecretCredential = credential
    
        // Create an auth provider using the credential
        authProvider, err := auth.NewAzureIdentityAuthenticationProviderWithScopes(g.clientSecretCredential, []string{
            "https://graph.microsoft.com/.default",
        })
        if err != nil {
            return err
        }
    
        // Create a request adapter using the auth provider
        adapter, err := msgraphsdk.NewGraphRequestAdapter(authProvider)
        if err != nil {
            return err
        }
    
        // Create a Graph client using request adapter
        client := msgraphsdk.NewGraphServiceClient(adapter)
        g.appClient = client
    
        return nil
    }
    

    Sugerencia

    Si usa goimports, es posible que algunos módulos se quiten de la import instrucción en graphhelper.go al guardar. Es posible que deba volver a agregar los módulos para compilarlos.

  2. Reemplace la función vacía initializeGraph en graphapponlytutorial.go por lo siguiente.

    func initializeGraph(graphHelper *graphhelper.GraphHelper) {
        err := graphHelper.InitializeGraphForAppAuth()
        if err != nil {
            log.Panicf("Error initializing Graph for app auth: %v\n", err)
        }
    }
    

Este código inicializa dos propiedades, un DeviceCodeCredential objeto y un GraphServiceClient objeto . La InitializeGraphForUserAuth función crea una nueva instancia de DeviceCodeCredentialy, 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 userClient, 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 ./graphhelper/graphhelper.go.

    func (g *GraphHelper) GetAppToken() (*string, error) {
        token, err := g.clientSecretCredential.GetToken(context.Background(), policy.TokenRequestOptions{
            Scopes: []string{
                "https://graph.microsoft.com/.default",
            },
        })
        if err != nil {
            return nil, err
        }
    
        return &token.Token, nil
    }
    
  2. Reemplace la función vacía displayAccessToken en graphapponlytutorial.go por lo siguiente.

    func displayAccessToken(graphHelper *graphhelper.GraphHelper) {
        token, err := graphHelper.GetAppToken()
        if err != nil {
            log.Panicf("Error getting user token: %v\n", err)
        }
    
        fmt.Printf("App-only token: %s", *token)
        fmt.Println()
    }
    
  3. Compile y ejecute la aplicación mediante la ejecución de go run graphapponlytutorial. Escriba 1 cuando se le solicite una opción. La aplicación muestra un token de acceso.

    Go Graph App-Only 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 solo aplicación 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 role notificación del token contiene los ámbitos de permiso de Microsoft Graph esperados.

Paso siguiente