身份验证成功,但无法使用Azure Golang SDK检索和列出Azure AD用户

身份验证成功,但无法使用Azure Golang SDK检索和列出Azure AD用户,azure,go,sdk,Azure,Go,Sdk,我正在尝试使用Azure Golang SDK获取Azure广告用户列表 需要注意的几件事: 1.身份验证成功。“授权成功。”在我使用下面的代码获取Azure SPN的承载令牌时显示。 这几乎是从Azure Go SDK repo中挑选出来的普通代码 //GetGraphAuthorizer gets an OAuthTokenAuthorizer for graphrbac API. func GetGraphAuthorizer(fs auth.FileSettings) (autores

我正在尝试使用Azure Golang SDK获取Azure广告用户列表

需要注意的几件事: 1.身份验证成功。“授权成功。”在我使用下面的代码获取Azure SPN的承载令牌时显示。 这几乎是从Azure Go SDK repo中挑选出来的普通代码

//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
}
在AbroundGetGraphAuthorizer函数上定义了一个包装器,用于实例化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的权限


非常感谢您的帮助。

不是100%确定,但出于某种原因,我不得不授予Azure SPN“委托”权限: Directory.ReadWrite.All Groups.ReadWrite.All

令人惊讶的是,一旦程序列出了用户,我就从SPN中删除了上面的“委托”权限,只保留了应用程序权限,它继续工作