我正在尝试将WebHDFS与Azure Data Lake一起使用。根据微软的documentation,应遵循的步骤是:
使用client_id,tenant_id和密钥向OAUTH2端点发出请求
curl -X POST https://login.microsoftonline.com/<TENANT-ID>/oauth2/token \
-F grant_type=client_credentials \
-F resource=https://management.core.windows.net/ \
-F client_id=<CLIENT-ID> \
-F client_secret=<AUTH-KEY>
成功之后,您将返回一些包含“access_token”对象的JSON,通过添加标题,您应该将该内容包含在后续WebHDFS请求中
Authorization: Bearer <content of "access_token">
其中<content of "access_token">
是“access_token”对象中的长字符串。
一旦你包含了那个标题,你应该能够进行WebHDFS调用,例如列出目录,你可以做到
curl -i -X GET -H "Authorization: Bearer <REDACTED>" https://<yourstorename>.azuredatalakestore.net/webhdfs/v1/?op=LISTSTATUS
完成所有这些步骤后,运行上面的curl命令列出目录时出现HTTP 401错误:
WWW-Authenticate: Bearer authorization_uri="https://login.windows.net/<REDACTED>/", error="invalid_token", error_description="The access token is invalid."
与身体
{"error":{"code":"AuthenticationFailed","message":"Failed to validate the access token in the 'Authorization' header."}}
有谁知道可能是什么问题?
我将令牌粘贴到jwt.io并且它有效(没有检查签名)。内容是这样的:
{
typ: "JWT",
alg: "RS256",
x5t: "MnC_VZcATfM5pOYiJHMba9goEKY",
kid: "MnC_VZcATfM5pOYiJHMba9goEKY"
}.
{
aud: "https://management.core.windows.net",
iss: "https://sts.windows.net/<TENANT-ID>/",
iat: 1460908119,
nbf: 1460908119,
exp: 1460912019,
appid: "<APP-ID>",
appidacr: "1",
idp: "https://sts.windows.net/<TENANT-ID>/",
oid: "34xxxxxx-xxxx-xxxx-xxxx-5460xxxxxxd7",
sub: "34xxxxxx-xxxx-xxxx-xxxx-5460xxxxxxd7",
tid: "<TENANT-ID>",
ver: "1.0"
}.
答案 0 :(得分:1)
请单击“数据资源管理器”按钮,然后突出显示根文件夹并单击“访问”。然后在那里将您的AAD应用程序权限授予WebHDFS。我相信您已经完成的工作就是授予AAD应用程序使用门户或Azure PowerShell管理Azure Data Lake Store的权限。您尚未实际授予WebHDFS权限。关于安全性的进一步阅读是here。