Аутентификация прошла успешно, но не удалось получить и перечислить Azure пользователей AD, использующих Azure Golang SDK - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь использовать Azure Golang SDK, чтобы вытащить список Azure пользователей AD.

Несколько замечаний: 1. Аутентификация прошла успешно. «Авторизация прошла успешно». отображается, когда я использую приведенный ниже код для получения токена на предъявителя для Azure SPN. Это в значительной степени ванильный код, выбранный из Azure - Go -SDK репо.

//GetGraphAuthorizer gets an OAuthTokenAuthorizer for graphrbac API.

func GetGraphAuthorizer(fs auth.FileSettings) (autorest.Authorizer, error) {
    if graphAuthorizer != nil {
        return graphAuthorizer, nil
    }

    var a autorest.Authorizer
    var err error

    a, err = getAuthorizerForResource(grantType(), Environment().GraphEndpoint, fs)

    if err == nil {
        // cache
        graphAuthorizer = a
        fmt.Println("Authorization successful.")
    } else {
        graphAuthorizer = nil
        fmt.Println ("Authorization failed.")
    }

    return graphAuthorizer, err
}

Определена оболочка для GetGraphAuthorizer функции для создания экземпляра userClient объект:

func getADUserClient(fs auth.FileSettings) graphrbac.UsersClient {
    userClient := graphrbac.NewUsersClient(azure.GetTenantId(fs))
    a, _ := azure.GetGraphAuthorizer(fs)
    userClient.Authorizer = a
    userClient.AddToUserAgent(azure.UserAgent())
    return userClient
}

Затем я использую токен для перечисления пользователей в Azure AD в следующей функции:

    adUserClient := getADUserClient(fs) 
    // if auth failed, then it should've displayed the failure message here but prints "Authorization successful instead"
    for list, err := adUserClient.ListComplete(context.Background(), ""); list.NotDone(); err = list.Next() {
            if err != nil {
                fmt.Print("got error while traversing User list: ", err)
            } 
            i := list.Value()
            fmt.Println(*i.DisplayName)
            fmt.Println(*i.GivenName)

        }

Нет выходных данных, как всегда !!

К вашему сведению: - У меня есть пользователи в Azure арендаторе. Я предоставил SPN доступ к Graph API.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 февраля 2020

Не уверен на 100%, но по какой-то причине мне пришлось предоставить Azure SPN «делегированное» разрешение на: Directory.ReadWrite.All Groups.ReadWrite.All

Удивительно, но как только программа перечислила пользователей, я удалил выше «делегированные» разрешения от SPN и просто оставил разрешения для приложения, и он продолжает работать!

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