次の方法で共有


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

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

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

注:

この記事はお役に立ちましたか? お客様の入力は、当社にとって重要です。 このページの [フィードバック ] ボタンを使用して、この記事がどれだけうまく機能したか、または改善する方法をお知らせください。

現象

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

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

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

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

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

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

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

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

  • 次に示すように、サインイン後に [プロファイル] ページに移動することで、APIM 開発者ポータルから特定の製品のサブスクリプション キーをチェックできます。

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

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

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

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

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

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

    HTTP/1.1 401 未承認

    Content-Length: 152
    Content-Type: application/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 フィードバック コミュニティに製品フィードバックを送信することもできます。