web-dev-qa-db-ja.com

Azure Webアプリ+ Node.js + Azure AD =エラー431

Azure Webアプリで実行するNode.jsベースのWebアプリケーションを作成しました。これをAzure Active Directory認証の背後に置きました。 「App Service Authentication」をアクティブ化した後、ログインプロセスは正常に機能しますが、アプリに戻ると、HTTP 431「Request Header Fields Too Large」を返すだけです。

私のアプリではないことを検証するために、Node.jsのAzure Webアプリのサンプルを確認しました。AADをアクティブにすると、これでも431が返されます。

再現手順:

  • 新しいAzureリソースを作成-> Webアプリ
    • Nodeベースのランタイムスタックを選択します。たとえば、Node 12 LTS
    • OSを選択してください
    • Webアプリを作成し、展開が完了するまで待ちます
  • シンプルなウェブアプリを作成する
  • Webアプリの設定で、「認証/承認」に移動します
    • 「App Service Authentication」を「On」にします
    • Azure Active Directoryを選択します
    • エクスプレス管理モードを選択し、プロセス中に新しいAzure ADアプリを作成します
    • 「リクエストが認証されない場合のアクション」として「Azure ADでログイン」を選択します。
    • 確認

結果:ブラウザーでWebアプリのURLを開くと、ログインプロセスが表示され、プロセスに従ってすべてが正常に動作しているように見え、AADがアプリケーションに戻りますが、その時点でHTTP 431が返されます。

さらなるテスト:

  • 認証を無効にすると、すべてが再び正常に動作します
  • Nodeアプリの代わりに単純な.htmlファイルをアップロードすると、認証を有効にするとアプリが正常に動作します
  • Restifyとhttpでテスト済み

何か案は?何か不足していますか?

4
Dirk Songür

ヘッダーに8KBのハードキャップを使用するノードの最近のバージョンには制限があるため、これは既知の問題です。 EasyAuthはリクエストにいくつかの非常に大きなヘッダーを追加します。これにより、ノードコンテナーはミドルウェアコンテナーによって行われたリクエストを400で拒否する可能性があります。詳細については、こちらをご覧ください:アプリの設定WEBSITE_AUTH_DISABLE_IDENTITY_FLOWをtrueに設定することで軽減できます。これにより、リクエストに追加した最大のヘッダーの1つが削除されます。このヘッダーは通常、.NET FrameworkアプリとAzure Functionsアプリでのみ使用されるため、この設定は安全です。

それでも問題が発生する場合は、NodeJS 12バージョンを試すか、ヘッダーサイズパラメーターを大きくしてください:node server.js --max-http-header-size 81000

2