Поделиться через


Добавление проверки подлинности только для приложений в приложения Go для Microsoft Graph

В этой статье вы добавите проверку подлинности только для приложений в приложение, созданное в разделе Сборка приложений Go с помощью Microsoft Graph и проверки подлинности только для приложений.

Клиентский модуль удостоверений Azure для Go предоставляет множество TokenCredential классов, реализующих потоки маркеров OAuth2. Пакет SDK Microsoft Graph для Go использует эти классы для проверки подлинности вызовов Microsoft Graph.

Настройка клиента Graph для проверки подлинности только для приложений

В этом разделе вы используете ClientSecretCredential класс для запроса маркера доступа с помощью потока учетных данных клиента.

  1. Добавьте следующую функцию в ./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
    }
    

    Совет

    Если вы используете goimports, некоторые модули могут быть удалены из инструкции import в graphhelper.go при сохранении. Для сборки может потребоваться снова добавить модули.

  2. Замените пустую initializeGraph функцию в graphapponlytutorial.go следующим кодом.

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

Этот код инициализирует два свойства: DeviceCodeCredential объект и GraphServiceClient объект . Функция InitializeGraphForUserAuth создает новый экземпляр DeviceCodeCredential, а затем использует его для создания нового экземпляра GraphServiceClient. Каждый раз, когда вызов API выполняется к Microsoft Graph через userClient, он использует предоставленные учетные данные для получения маркера доступа.

Тестирование ClientSecretCredential

Затем добавьте код для получения маркера доступа из ClientSecretCredential.

  1. Добавьте следующую функцию в ./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. Замените пустую displayAccessToken функцию в graphapponlytutorial.go следующим кодом.

    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. Выполните сборку и запуск приложения, запустив go run graphapponlytutorial. Введите 1 при появлении запроса на выбор параметра. Приложение отображает маркер доступа.

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

    Совет

    Только для проверки и отладки можно декодировать маркеры доступа только для приложений с помощью средства синтаксического анализа токенов Майкрософт в сети по адресу https://jwt.ms. Анализ маркера может оказаться полезным, если при вызове Microsoft Graph возникают ошибки маркера. Например, убедитесь, что role утверждение в маркере содержит ожидаемые области разрешений Microsoft Graph.

Следующее действие