Azure AD Go Пользователи списка приложений демона SDK возвращают сообщение «Токен доступа отсутствует или имеет неправильный формат» - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь получить сведения о пользователе с помощью графического 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 Ответ

1 голос
/ 16 июня 2020
• 1000 отображается как: https://graph.microsoft.com/v1.0/users

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

1. Go в свое приложение в объявлении azure и нажмите «Разрешения API» -> «Добавить разрешение» -> «Azure График Active Directory». enter image description here

2. Добавьте разрешение «Каталог». enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...