Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы добавите проверку подлинности только для приложений в приложение, созданное в разделе Сборка приложений Go с помощью Microsoft Graph и проверки подлинности только для приложений.
Клиентский модуль удостоверений Azure для Go предоставляет множество TokenCredential классов, реализующих потоки маркеров OAuth2.
Пакет SDK Microsoft Graph для Go использует эти классы для проверки подлинности вызовов Microsoft Graph.
Настройка клиента Graph для проверки подлинности только для приложений
В этом разделе вы используете ClientSecretCredential класс для запроса маркера доступа с помощью потока учетных данных клиента.
Добавьте следующую функцию в ./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 при сохранении. Для сборки может потребоваться снова добавить модули.Замените пустую
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.
Добавьте следующую функцию в ./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 }Замените пустую
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() }Выполните сборку и запуск приложения, запустив
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.