Flutter Web项目部署至IIS访问报HTTP 401.3未授权错误咨询
问题根因
HTTP 401.3错误属于IIS静态资源访问阶段的权限拦截,和Flutter框架逻辑、项目使用的Firebase依赖没有直接关系。
同IIS下其他站点正常,是因为存量站点的目录权限已经完成配置;本次新部署的Flutter站点通过zip包解压上传,解压后的文件默认携带压缩时本地开发环境的权限配置,不会自动继承服务器IIS站点目录的访问规则,导致IIS运行站点所用的账号没有读取构建产物的权限,直接触发访问拦截。
Firebase相关逻辑是页面加载完成后在用户浏览器端运行的,不会在IIS返回静态资源阶段触发权限问题,不需要在IIS侧给Firebase做特殊配置。
排查修复步骤
- 确认站点访问身份:打开IIS管理器,定位到对应Flutter站点,双击「身份验证」功能,选中「匿名身份验证」后点击右侧操作栏的「编辑」,记录当前配置的身份是默认的
IUSR账号,还是当前站点对应的应用程序池标识。 - 配置目录ACL权限:找到Flutter构建产物存放的站点根目录,右键打开「属性」-「安全」选项卡,点击「编辑」-「添加」,把上一步记录的账号加入权限列表,给该账号授予读取和执行、列出文件夹内容、读取三个权限,勾选「替换所有子对象的权限项」选项,应用后等待权限递归配置完成。
- 解除文件锁定:从其他设备传输到服务器的zip包解压后,内部文件会被Windows标记为「来自外部网络」,额外触发访问限制。在站点根目录打开PowerShell,执行命令
Get-ChildItem -Recurse | Unblock-File,批量解除所有文件的锁定状态。 - 补全IIS配置:Flutter Web构建产物包含
.wasm、.woff、.woff2等特殊后缀文件,IIS默认可能没有配置对应MIME类型,加上前端路由需要重写规则,直接在站点根目录新建web.config文件,写入以下配置:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <staticContent> <remove fileExtension=".wasm" /> <mimeMap fileExtension=".wasm" mimeType="application/wasm" /> <remove fileExtension=".woff" /> <mimeMap fileExtension=".woff" mimeType="font/woff" /> <remove fileExtension=".woff2" /> <mimeMap fileExtension=".woff2" mimeType="font/woff2" /> </staticContent> <rewrite> <rules> <rule name="Flutter Route Rewrite" stopProcessing="true"> <match url=".*" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/index.html" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
- 配置完成后,在IIS管理器中找到站点对应的应用程序池,执行「回收」操作清除权限缓存,重启站点后重新访问即可。
页面可以正常打开后,如果出现Firebase登录/读写报错,再去Firebase控制台把当前站点的域名加入授权域名列表即可,这一步和当前的401.3错误无关。
内容的提问来源于stack exchange,提问作者Aiden P
相关产品推荐
相关产品推荐

