aadtoken:从azuread获取令牌的http连接失败http响应:400错误请求

x7yiwoj4  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(539)

尝试通过控制台中的hadoop客户端使用令牌连接到azure data lake storage gen2并收到错误

ls: AADToken: HTTP connection failed for getting token from AzureAD. Http response: 400 Bad Request

如果我把记号放进“”错误就不同了

id_token:<TOKEN VALUE>: Unknown command
Usage: hadoop fs [generic options]

所做的:
使用创建存储帐户https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-quickstart-create-account
已使用创建azure ad应用程序https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal
从第二步开始授予管理员申请许可-https://i.imgur.com/mymtkeu.png
还授予了管理员对企业应用程序的许可,其名称为步骤2中的应用程序https://i.imgur.com/bpx48ne.png
步骤3和4按此处所述进行-https://docs.microsoft.com/en-us/azure/active-directory/manage-apps/configure-user-consent#grant-在azure门户中注册应用程序时的管理员同意
然后我生成了一个授权码

https://login.microsoftonline.com/<TENANT ID>/oauth2/authorize?client_id=<CLIENT ID>&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F&response_mode=query&resource=https://datalake.azure.net/&state=12345

拿到令牌了吗

curl -X POST https://login.microsoftonline.com/<TENANT ID>/oauth2/token \
 -F redirect_uri=https://localhost/myapp/ \
 -F grant_type=authorization_code \
 -F resource=https://datalake.azure.net \
 -F client_id=<CLIENT ID> \
 -F client_secret=<CLIENT SECRET> \
 -F code=OAQABAAIAAAAP0wLlqdLVToOpA4kwzSnxLhHJrARX8557... (Authorization code)

根据apache文档,我创建了一个console命令

hadoop fs -Dfs.azure.ssl.channel.mode=Default_JSSE
-Dfs.azure.account.auth.type=OAuth
-Dfs.azure.account.oauth.provider.type=org.apache.hadoop.fs.azurebfs.oauth2.RefreshTokenBasedTokenProvider
-Dfs.azure.account.oauth2.client.id=<CLIENT ID>
-Dfs.azure.account.oauth2.refresh.token=<TOKEN>
-ls abfss://<CONTAINER NAME>@<STORAGE ACCOUNT>.dfs.core.windows.net/

因此下面的命令应该显示容器中文件夹和文件的列表。azure中的命令或容器配置有问题吗?请给我建议。

n8ghc7c1

n8ghc7c11#

你在使用社区版的databricks吗?我遇到了同样的问题,因为我用完了空间或超过了dbfs上的文件数,所以我想我应该在azure上挂载我自己的存储帐户,并遇到了与您相同的问题。
我启动了自己的databricks示例,并成功地装载了自己的存储,但在communityedition上运行相同的代码导致了一个错误。

相关问题