Hinzufügen der reinen App-Authentifizierung zu Go-Apps für Microsoft Graph

In diesem Artikel fügen Sie der Anwendung, die Sie in Build Go-Apps mit Microsoft Graph und nur app-Authentifizierung erstellt haben, die reine App-Authentifizierung hinzu.

Das Azure Identity Client Module for Go bietet viele TokenCredential Klassen, die OAuth2-Tokenflows implementieren. Das Microsoft Graph SDK für Go verwendet diese Klassen, um Aufrufe von Microsoft Graph zu authentifizieren.

Konfigurieren des Graph-Clients für die reine App-Authentifizierung

In diesem Abschnitt verwenden Sie die ClientSecretCredential -Klasse, um mithilfe des Clientanmeldeinformationsflows ein Zugriffstoken anzufordern.

  1. Fügen Sie . /graphhelper/graphhelper.go die folgende Funktion hinzu.

    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
    }
    

    Tipp

    Wenn Sie verwenden goimports, werden möglicherweise einige Module aus Ihrer import Anweisung in graphhelper.go beim Speichern entfernt. Möglicherweise müssen Sie die Module zum Erstellen erneut hinzufügen.

  2. Ersetzen Sie die leere initializeGraph Funktion in graphapponlytutorial.go durch Folgendes.

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

Dieser Code initialisiert zwei Eigenschaften, ein DeviceCodeCredential -Objekt und ein GraphServiceClient -Objekt. Die InitializeGraphForUserAuth Funktion erstellt eine neue instance von DeviceCodeCredentialund verwendet dann diesen instance, um eine neue instance von GraphServiceClientzu erstellen. Jedes Mal, wenn ein API-Aufruf an Microsoft Graph über userClienterfolgt, werden die bereitgestellten Anmeldeinformationen verwendet, um ein Zugriffstoken abzurufen.

Testen von ClientSecretCredential

Fügen Sie als Nächstes Code hinzu, um ein Zugriffstoken ClientSecretCredentialvon abzurufen.

  1. Fügen Sie . /graphhelper/graphhelper.go die folgende Funktion hinzu.

    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. Ersetzen Sie die leere displayAccessToken Funktion in graphapponlytutorial.go durch Folgendes.

    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. Erstellen Sie die App, und führen Sie sie aus, indem Sie ausführen go run graphapponlytutorial. Geben Sie ein 1 , wenn Sie zur Eingabe einer Option aufgefordert werden. Die Anwendung zeigt ein Zugriffstoken an.

    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...
    

    Tipp

    Nur zu Validierungs- und Debugzwecken können Sie Nur-App-Zugriffstoken mithilfe des Onlinetokenparsers von Microsoft unter https://jwt.msdecodieren. Die Analyse Ihres Tokens kann nützlich sein, wenn beim Aufrufen von Microsoft Graph Tokenfehler auftreten. Beispielsweise wird überprüft, ob der role Anspruch im Token die erwarteten Microsoft Graph-Berechtigungsbereiche enthält.

Nächster Schritt