Azure Data Lake で WebHDFS を使用しようとしています。Microsoft のドキュメントによると、従うべき手順は次のとおりです。
- Azure Management Services へのキーと委任されたアクセス許可を使用して、Azure AD で新しいアプリケーションを作成します。
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"
}.