Squeak.ru - шаблоны программирования

Пользователи списка приложений демона Azure AD Go SDK возвращают токен доступа, отсутствующий или искаженный

Я пытаюсь получить информацию о пользователе с помощью графического API Go SDK. У меня есть приложение-демон, которое было настроено с соответствующими разрешениями, которые я проверил с помощью curl, как показано ниже:

Получить токен

curl \
  -X POST \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data 'client_id={client_id}&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default&client_secret={client_secret}&grant_type=client_credentials' \

https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token

Запрос

curl -X GET \
 -H "Authorization: Bearer XYZ...." \
"https://graph.microsoft.com/v1.0/users"

Я успешно получаю список пользователей.


Однако, когда я пытаюсь сделать это через Go SDK, это не удается.

Я установил необходимые переменные среды для аутентификации в соответствии с https://github.com/Azure/azure-sdk-for-go#more-authentication-details:

- `AZURE_TENANT_ID`: Specifies the Tenant to which to authenticate.
- `AZURE_CLIENT_ID`: Specifies the app client ID to use.
- `AZURE_CLIENT_SECRET`: Specifies the app secret to use

Код

func main() {

    authorizer, err := auth.NewAuthorizerFromEnvironment()
    if err != nil {
        fmt.Println(err)
    }

    client := graphrbac.NewUsersClient(os.Getenv("AZURE_TENANT_ID"))
    client.Authorizer = authorizer

    if _, err := client.List(context.Background(), "", ""); err != nil {
        fmt.Println("list users", err)
    }
}

Ошибка

list users graphrbac.UsersClient#List: Failure responding to request: StatusCode=401 -- Original Error: autorest/azure: Service returned an error. Status=401 Code="Unknown" Message="Unknown service error" Details=[{"odata.error":{"code":"Authentication_MissingOrMalformed","message":{"lang":"en","value":"Access Token missing or malformed."}}}]

Документация здесь предполагает, что аутентификация и токен обрабатываются пакет auth.

Обновление 1

Я запустил его в режиме отладки, установив AZURE_GO_SDK_LOG_LEVEL=DEBUG, и обнаружил, что URL-адрес запроса GET отличается от того, что я использовал в своей команде curl:

(2020-06-16T15:31:49.3790420+10:00) INFO: REQUEST: GET https://graph.windows.net/{tenant_id}/users?api-version=1.6
User-Agent: Go/go1.13.11 (amd64-darwin) go-autorest/v14.1.1 Azure-SDK-For-Go/v43.2.0 graphrbac/1.6
Authorization: **REDACTED**
(2020-06-16T15:31:50.5191120+10:00) INFO: RESPONSE: 401 https://graph.windows.net/{tenant_id}/users?api-version=1.6

Если я использую этот URL-адрес в своей команде curl, я получаю:

{"odata.error":{"code":"Authentication_ExpiredToken","message":{"lang":"en","value":"Your access token has expired. Please renew it before submitting the request."}}}%

Ответы:


1

Кажется, что SDK использует azure ad graph API, но не Microsoft Graph API в бэкэнде.

API графа Azure AD выглядит так: https://graph.windows.net/{tenant_id}/users?api-version=1.6

API-интерфейс Microsoft Graph выглядит так: https://graph.microsoft.com/v1.0/users

Поэтому вам нужно добавить разрешения графа Azure Ad для приложения, зарегистрированного в вашем объявлении Azure, но не добавлять разрешения графа Microsoft. Добавьте разрешение, выполнив следующие действия:

1. Перейдите к своему приложению в объявлении Azure и нажмите "Разрешения API" --> "Добавить разрешение" --> "Azure Active Directory Graph". введите здесь описание изображения

2. Добавьте разрешение "Каталог". введите здесь описание изображения

3. Не забудьте предоставить согласие администратора.

16.06.2020
  • Спасибо, что сообщили все эти подробности! Я попробую и подтвержу. 16.06.2020
  • Это верно в соответствии с github.com/Azure/azure-sdk-for. -go/issues/7352 17.06.2020

  • 2

    Похоже, что ADAL уже устарел, хотя MSAL еще не готов (в SDK).

    Консоль Azure: введите здесь описание изображения

    microsoft-authentication-library-for-go: введите здесь описание изображения

    Это означает, что ответ @hury-shen по-прежнему действителен.

    10.05.2021
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...


    © 2024 squeak.ru, Squeak.ru - шаблоны программирования