如果启用了身份验证,Azure 上的查询/标头太大

Posted

技术标签:

【中文标题】如果启用了身份验证,Azure 上的查询/标头太大【英文标题】:Query/headers too large on Azure if auth enabled 【发布时间】:2019-10-11 12:00:03 【问题描述】:

我有一个在本地运行良好的 node/express 应用程序。我已将它上传到 Azure Web App,只要我不启用身份验证,它就可以正常工作。当我启用 AAD 身份验证时,应用程序失败并显示 STATUS 500.1011“错误请求”。我在 url 中有很多查询参数。如果我充分减少参数的长度,则应用程序会再次正常加载。 Azure 中的查询/标头似乎有一些限制?

我已经尝试了几个小时来解决这个问题,但我想我必须承认失败。我以为this 可能会修复它,但它看起来不像。

这是我当前的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <webSocket enabled="true" />
        <handlers>
            <add name="iisnode" path="server.js" verb="*" modules="iisnode"/>
        </handlers>
        <rewrite>
        <rules>
            <rule name="NodeInspector" patternSyntax="ECMAScript" stopProcessing="true">
                <match url="^server.js\/debug[\/]?" />
            </rule>
            <rule name="DynamicContent">
                <conditions>
                    <add input="REQUEST_FILENAME" matchType="IsFile" negate="True"/>
                </conditions>
                <action type="Rewrite" url="server.js"/>
            </rule>
        </rules>
        </rewrite>
        <security>
            <requestFiltering>
                <requestLimits maxQueryString="32768" maxUrl="65536"/>
            </requestFiltering>
        </security>
        <httpErrors existingResponse="PassThrough" />
    </system.webServer>
</configuration>

【问题讨论】:

【参考方案1】:

我想我找到了问题所在。节点将November 2018 中的最大标头大小从 80kb 减少到 8kb。

有很多关于它的讨论here 和here。

我尝试增加 max-http-header-size,但无法使其在 Azure 上运行。所以我现在的解决方案是使用旧版本的节点。希望最终会在这些讨论中发布解决方案。

【讨论】:

【参考方案2】:

只需在iisnode.yml中添加--max-http-header-size即可,至于在Azure Appservice中将Flag传递给NodeJS的chrome V8的细节:Pass flags to NodeJS's Chrome V8 engine in Azure Web Apps

【讨论】:

以上是关于如果启用了身份验证,Azure 上的查询/标头太大的主要内容,如果未能解决你的问题,请参考以下文章

由于授权标头,Azure Blob 存储 403 身份验证失败

Azure 存储 SAS 无法进行身份验证

通过objective-c从azure表生成身份验证头

Azure 授权 - 让未经身份验证的用户调用 api

Azure 函数错误 - “密钥功能不可用,因为为此函数应用启用了身份验证/授权。”

Azure 服务器未能对请求进行身份验证。确保授权标头的值格式正确,包括签名