无法使用java

时间:2018-02-05 09:17:36

标签: azure azure-data-lake bad-request http-token-authentication

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

我有Microsoft免费跟踪帐户,并已完成以下步骤。

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

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

    现在我的问题是,

    1. 导致错误请求错误的缺失是什么?
    2. BTW,我也没有在“我的应用”选项下看到注册的应用,虽然当我选择“所有应用”选项时它是可见的吗?
    3. 由于

2 个答案:

答案 0 :(得分:0)

根据我的经验,这指向了权限'传递的问题或错误的参数......尽管错误信息并未这样说。

请再次检查您的权限。确保您已经通过Data Lake Store顶级目录确实获得了Azure Active Directory App权限。

您可能会给App"所有者"对adls的权利仅用于测试目的。您还可以使用"添加用户向导"

答案 1 :(得分: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();
        } 

    }
}