Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
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 suaimportinstrução em graphhelper.go ao guardar. Poderá ter de adicionar os módulos novamente para criar.Substitua a função empty
initializeGraphem 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 .
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 }Substitua a função empty
displayAccessTokenem 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() }Crie e execute a aplicação ao executar
go run graphapponlytutorial. Introduza1quando 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
roleafirmação no token contém os âmbitos de permissão esperados do Microsoft Graph.