Adicionar autenticação apenas de aplicação às aplicações Go para o Microsoft Graph

Neste artigo, vai adicionar a autenticação apenas de aplicação à aplicação que criou em Criar aplicações Go com o Microsoft Graph e a autenticação apenas de aplicações.

O Módulo de Cliente de Identidade do Azure para Go fornece muitas TokenCredential classes que implementam fluxos de tokens OAuth2. O SDK do Microsoft Graph para Go utiliza essas classes para autenticar chamadas para o Microsoft Graph.

Configurar o cliente do Graph para autenticação apenas de aplicações

Nesta secção, vai utilizar a ClientSecretCredential classe para pedir um token de acesso com o fluxo de credenciais de cliente.

  1. Adicione a seguinte função 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
    }
    

    Dica

    Se estiver a utilizar goimportso , alguns módulos poderão ser removidos da sua import instrução em graphhelper.go ao guardar. Poderá ter de adicionar os módulos novamente para criar.

  2. Substitua a função empty initializeGraph em graphapponlytutorial.go pelo seguinte.

    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 duas propriedades, um DeviceCodeCredential objeto e um GraphServiceClient objeto. A InitializeGraphForUserAuth função cria uma nova instância de DeviceCodeCredentiale, em seguida, utiliza essa instância para criar uma nova instância de GraphServiceClient. Sempre que é efetuada uma chamada à API ao Microsoft Graph através do userClient, utiliza a credencial fornecida para obter um token de acesso.

Testar o ClientSecretCredential

Em seguida, adicione código para obter um token de acesso a ClientSecretCredentialpartir do .

  1. Adicione a seguinte função 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. Substitua a função empty displayAccessToken em graphapponlytutorial.go pelo seguinte.

    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. Crie e execute a aplicação ao executar go run graphapponlytutorial. Introduza 1 quando lhe for pedida uma opção. A aplicação apresenta um token de acesso.

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

    Dica

    Apenas para fins de validação e depuração, pode descodificar tokens de acesso apenas de aplicações com o analisador de tokens online da Microsoft em https://jwt.ms. Analisar o token pode ser útil se encontrar erros de token ao chamar o Microsoft Graph. Por exemplo, verificar se a role afirmação no token contém os âmbitos de permissão esperados do Microsoft Graph.

Próxima etapa