次の方法で共有


API の呼び出し中に未承認のエラー (401)

Azure API Management トラブルシューティング シリーズに関する記事を参照して、これはラボの 3 番目のシナリオです。 問題を再現するには、このに従ってラボのセットアップ手順に従っていることを確認します。

元の製品バージョン: API Management サービス
元の KB 番号: 4464930

Note

この記事は役に立ちましたか? あなたの入力は私たちにとって重要です。 このページの Feedback ボタンを使用して、この記事がどれだけうまく機能したか、または改善方法をお知らせください。

現象

Echo APIは、その下の操作の呼び出し中に、さまざまな種類のHTTP 401 - Unauthorizedエラーをスローし始めました。 リソース リソースの作成と リソースの作成 操作に次のエラー メッセージが表示されます。

{
"statusCode": 401,
"message": "無効なサブスクリプション キーが原因でアクセスが拒否されました。 アクティブなサブスクリプションに対して有効なキーを指定してください。
}

残りの操作が表示されているのに対し、

{
"statusCode": 401,
"message": "サブスクリプション キーがないためアクセスが拒否されました。 API への要求を行うときは、必ずサブスクリプション キーを含めるようにしてください。
}

すべての操作で予想される HTTP 応答コードは 200 ですが、バックエンド API は常にヘッダーに加えて要求本文として送信した内容をエコーするため、応答本文は異なります。

トラブルシューティングの手順

  • API へのアクセス権を取得するためには、まず開発者が成果物をサブスクライブする必要があります。 サブスクライブすると、その製品の任意の API に適した要求ヘッダーの一部として送信されるサブスクリプション キーが取得されます。 Ocp-Apim-Subscription-Key は、この API に関連付けられている製品のサブスクリプション キーに対して送信される要求ヘッダーです。 キーが自動的に入力されます。

  • エラー無効なサブスクリプション キーが原因でアクセスが拒否されました。アクティブなサブスクリプションに対して有効なキーを指定してくださいCreate リソースおよび Retrieve リソース操作の呼び出し中に、Ocp-Apim-Subscription-Key 要求ヘッダーの間違った値を送信していることは明らかです。

  • 次に示すように、サインイン後に Profile ページに移動して、APIM 開発者ポータルから特定の製品のサブスクリプション キーを確認できます。

  • Show ボタンを選択すると、サブスクライブしている各製品のサブスクリプション キーが表示されます。

    各製品のサブスクリプション キーのスクリーンショット。

  • Test タブから送信されるヘッダーを確認すると、Ocp-Apim-Subscription-Key 要求ヘッダーの値が間違っていることがわかります。 APIM によってこの要求ヘッダーに適切なサブスクリプション キーが自動的に入力されるため、それがどのようにして可能になるか疑問に思うかもしれません。

  • [ デザイン] タブで、Create リソースRetrieve リソース操作のフロントエンド定義確認してみましょう。慎重に検査すると、これらの操作で、Headers タブに追加された要求ヘッダーOcp-Apim-Subscription-Key のハードコーディングされた値が間違っていることがわかります。

  • これを削除すると、無効なサブスクリプション キーの問題が解決されますが、サブスクリプション キーエラーが発生します。

    次のエラー メッセージが表示されることがあります。

    HTTP/1.1 401 Unauthorized

    Content-Length: 152
    コンテンツ タイプ: アプリケーション/json
    日付: 2018 年 7 月 29 日 (日) 14:29:50 GMT
    Vary: Origin WWW-Authenticate: AzureApiManagementKey realm="https://pratyay.azure-api.net/echo",name="Ocp-Apim-Subscription-Key",type="header" {
    "statusCode": 401,
    "message": "サブスクリプション キーがないためアクセスが拒否されました。 API への要求を行うときは、必ずサブスクリプション キーを含めるようにしてください。 }

  • Echo APIsettings に移動し、使用可能な製品のいずれかに関連付けられているかどうかを確認します。 そうでない場合は、サブスクリプション キーを取得できるように、この API を製品に関連付ける必要があります。

    開発者は、まず製品をサブスクライブして API へのアクセス権を取得する必要があります。 サブスクライブすると、その製品の API に適したサブスクリプション キーを受け取ります。 APIM インスタンスを作成した場合は、既に管理者になっているため、既定ですべての製品をサブスクライブしています。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。