0

我正在尝试使用 java 程序连接到 azure 数据湖,在该程序中我可以从 azure 数据湖获取数据,但我的程序无法进行身份验证并因错误请求错误而终止。

我有 Microsoft 免费试用帐户并已完成以下步骤。

  1. 在默认 azure 活动目录上注册的 Web 应用程序。(登录 URL 是虚拟的)
  2. 复制 auth-endpoint-token 和 application-id 并生成客户端密码
  3. 已经有权限(因为我是唯一具有默认登录的用户)
  4. 添加了 Azure 数据湖并获得了所需的权限。

现在我有了这个java代码。

resource = "https://XXXXXlake.azuredatalakestore.net"
ClientCredsTokenProvider provider = new ClientCredsTokenProvider(authEndPointToken, clientID, clientSecret);
AzureADToken token = provider.getToken();

现在我的问题是,

  1. 缺少什么会导致错误请求错误?
  2. 顺便说一句,我也没有在“我的应用程序”选项下看到已注册的应用程序,尽管当我选择“所有应用程序”选项时它是可见的?

谢谢

4

2 回答 2

0

以我的经验,这指向权限问题或传递了错误的参数......尽管错误消息没有这么说。

请再次检查您的权限。确保您确实已授予 Azure Active Directory 应用程序对 Data Lake Store 顶级目录的权限。

出于测试目的,您可能会授予应用程序对 adls 的“所有者”权利。您还可以使用“添加用户向导”

于 2018-02-18T18:16:00.457 回答
0

下面的代码对我有用。为此,您需要提供 clientid、clientkey、authTokenEndpoint 和 accountFQDN,您可以从 azure 数据湖控制台获取这些信息。请确保您为您的应用程序授予了所有必要的权限,以访问您拥有数据的 azure 活动目录和位置。

public class TestConnection {

    public static void main(String[] args) {
        try {
            String clientId = "xyz";
            String authTokenEndpoint = "https://login.microsoftonline.com/6f04c329-75be-4f3f-bb37-ba8857b01aa6/oauth2/token";
            String clientKey = "abc";

            AccessTokenProvider provider = new ClientCredsTokenProvider(authTokenEndpoint, clientId, clientKey);
            String accountFQDN = "efg";  // full account FQDN, not just the account name
            ADLStoreClient client = ADLStoreClient.createClient(accountFQDN, provider);
            InputStream in = client.getReadStream("/abc/def/xyz.json");
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ( (line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
            System.out.println();
            System.out.println("File contents read.");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }
}
于 2018-03-21T10:44:17.940 回答