HTTP 401 Access Denied (invalid subscription key) のエラーが発生した場合の切り分け方法

(※ 2018年2月1日公開時点の情報となります。)

こんにちは。Cognitive Services 開発サポートチーム の中神です。

今回は Cognitive Services をご利用いただくお客様からお問い合わせいただくことの多い内容についてご紹介します。

Cognitive Services には様々なサービスがありますが、基本的にはいずれも HTTP のリクエストを送信することで、結果がレスポンスとして得られる HTTP REST API となります。この時 HTTP リクエストを呼び出した際のエラーコードとして HTTP 401 Access Denied, message: “Access denied due to invalid subscription key. Make sure to provide a valid key for an active subscription.” が返る場合があります。

このエラーが発生した場合の一般的な切り分けの観点をご案内します。お問い合わせ前に一度ご確認いただければ幸いです。

(1) 間違った API キーを指定して API を呼び出している

ほとんどの Cognitive Services の API では認証情報として HTTP のリクエスト ヘッダーに Ocp-Apim-Subscription-Key を含める必要があります。ここで指定された API キーに誤りがあると HTTP 401 のエラーとなります。 Azure ポータルで作成した API のリソースを開き、 Keys の項目をご確認ください。KEY1、 KEY2 のいずれもキーも有効です。

(2) 異なる Cognitive Services の API キーを指定している

API キーは各サービス毎に固有であるため、他のサービス用の API キーを別のサービスで使うことはできません。

例: Face API の Keys のページで確認した API キーを Computer Vision API を呼び出す際に使おうとしている。

(3) 異なるリージョン用の API キーを指定している

Cognitive Services では Azure ポータルから作成する際にリージョンを選択可能なサービスもあります。この場合 API キーは通常作成されたリージョンでのみ有効となるため、API を呼び出す際のエンドポイントが間違っていると 401 のエラーとなります。

例: West US を指定して作成しているにも関わらず、 South East Asia のエンドポイントにアクセスしている。

Overview のページから Endpoint の項目をご参照いただき、呼び出し先のエンドポイントに誤りがないかご確認ください。

(4) 呼び出している機能と価格帯 (Pricing Tier) が合っていない

一部の API では選択されている 価格帯 (Pricing Tier) によって呼び出し可能な機能が異なります。
例えば Bing Search API では S2 の価格帯を選択した場合 Bing Web Search API, Bing Autosuggest API, Bing Spell Check API がご利用いただけますが、Bing Image Search API は含まれていないためこの機能を利用した場合 401 のエラーとなります。

ご参考: Cognitive Services の価格 - Bing Search API
< https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/search-api/web/ >

(5) 呼び出す API のバージョンが間違っている

同じようなサービスを提供する API でも複数のバージョンが提供されている場合があります。
これは新バージョンのサービスがリリースされた後の移行期間中、同名で複数バージョンの API が存在することがあり、バージョンが異なる API を呼び出した場合にも 401 のエラーとなることがあります。Endpoint の項目にバージョンが含まれておりますのでご確認ください。

(6) LUIS の Programmatic Key と Endpoint Key の利用方法が間違っている

LUIS (Language Understanding) の場合、www.luis.ai のサイトからご確認いただける Programmatic Key と、 Azure ポータルから作成可能な Endpoint Key が存在します。Programmatic Key は LUIS のアプリケーションを管理するための API を呼び出す際にご利用いただけますが、 Endpoint Key は機械学習の結果を得るための エンドポイント API でのみ利用可能です。 Endpoint Key で管理用の API を呼び出した場合 401 のエラーとなります。

ご参考: Manage your LUIS keys
< /en-us/azure/cognitive-services/LUIS/manage-keys >

(7) Azure ポータルからリソースを作成した直後に利用しようとしている

Azure ポータルからリソースを作成した直後はサービス側でまだ API が有効になっておらず、正しいキーを利用しているにも関わらず 401 のエラーとなる場合があります。その際は最大 10 分程度お待ちいただいたのち、再度お試しください。

(8) 有効期限がある試用版の API キーを期限切れの状態で利用している

“Cognitive Services を試す” (https://azure.microsoft.com/ja-jp/try/cognitive-services/) から作成いただいた API キーは、試用版のため有効期限が設定されています。期限切れの API キーを利用した場合 401 のエラーとなります。

トラブルシューティング

API を呼び出すためには HTTP のリクエストをエンドポイントに対して送信する必要があります。
多くのサービスでは API の呼び出しをブラウザから確認するためのテスト用コンソールが用意されています。

Azure ポータルの Quick start から API reference を選択することで API の詳細なリファレンスが表示されます。

Open API testing console から作成した API のリージョンを選択します。(3) もご参照ください。

Ocp-Apim-Subscription-Key に API キーを入力してその他必要パラメータを埋めて Send を押すことでリクエストが送信されます。

HTTP 401 エラーが発生した際の切り分けのご参考になりましたら幸いです。

Cognitive Services 開発サポートチーム 中神