3

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"
}.
4

1 に答える 1

1

[データ エクスプローラー] ボタンをクリックし、ルート フォルダーを強調表示して [アクセス] をクリックしてください。次に、そこで AAD アプリのアクセス許可を WebHDFS に付与します。あなたが既に行ったことは、ポータルまたは Azure PowerShell を使用して Azure Data Lake Store を管理するためのアクセス許可を AAD アプリに付与することだけだと思います。実際にはまだ WebHDFS 権限を付与していません。セキュリティの詳細については、こちらを参照してください。

于 2016-04-18T12:50:50.530 に答える