配置IIS中WebDAV虚拟目录的ADFS认证及Office交互问题
解决IIS WebDAV的ADFS认证与Office在线编辑保存问题
我来帮你梳理下这个问题的解决方案——其实Microsoft Office是完全支持ADFS认证交互的,只是WebDAV和Office客户端的认证逻辑和浏览器不一样,不能直接复用浏览器的ADFS会话,需要针对性配置。下面分几个核心环节来处理:
一、先确认核心前提:Office能处理ADFS交互
Office客户端(Word、Excel这些)支持基于OAuth2/OpenID Connect或WS-Federation的ADFS认证,但默认不会自动识别浏览器的登录状态,必须让WebDAV站点的请求能触发Office的独立认证流程,同时ADFS要允许Office的请求接入。
二、配置IIS上WebDAV的ADFS认证
这里要注意:你的ASP.NET MVC应用用OWIN处理ADFS认证,但WebDAV是IIS原生模块,默认请求不会走OWIN管道,所以得让WebDAV的请求也能触发ADFS认证,同时和应用的认证会话做好兼容。
1. 让WebDAV请求经过OWIN管道
默认IIS会直接处理WebDAV的文件请求,绕开ASP.NET的OWIN中间件。你需要调整WebDAV虚拟目录的Handler Mappings:
- 找到WebDAV相关的请求规则(比如针对
*.docx、*.xlsx等Office格式,或者WebDAV的PROPFIND、PUT方法),把它们映射到ASP.NET的模块(比如aspNetCore模块,如果是.NET Core的话,或者System.Web.Handlers.TransferRequestHandler),这样请求会经过OWIN的ADFS中间件,触发认证流程。
2. 配置ADFS允许Office的用户代理
ADFS默认可能会拦截非浏览器的用户代理请求,而Office客户端的用户代理字符串和浏览器不一样(比如Microsoft Office Word 2016、Microsoft Office/16.0这类)。你需要在ADFS服务器上做调整:
- 打开ADFS管理控制台,找到你的应用对应的依赖方信任
- 右键选择“属性”,切换到“高级”标签,确保勾选了允许表单认证(Office客户端无法像浏览器那样自动处理Windows集成认证,需要表单跳转)
- 另外,在“认证策略”中,设置针对非浏览器客户端的认证方法(比如允许用户名密码登录)
- 可以通过Fiddler抓包获取Office的具体用户代理字符串,添加到依赖方信任的“允许的用户代理”列表中
3. 调整WebDAV的认证模式
- 禁用WebDAV虚拟目录的匿名认证,强制所有请求必须认证
- 不要同时启用Windows认证和ADFS认证,避免冲突;如果需要用Windows权限控制文件读写,可以配置ADFS的声明转Windows令牌功能,把ADFS的用户声明转换为本地Windows身份
三、配置Office客户端支持ADFS认证
Office默认不会自动处理ADFS的重定向,需要修改注册表来开启这个功能:
- 打开注册表编辑器(
regedit) - 导航到对应Office版本的注册表路径:
- Office 2016/2019/365:
HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Common\Internet - Office 2013:
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Internet
- Office 2016/2019/365:
- 添加两个DWORD值:
AllowAuthRedirect:设置为1(允许Office处理ADFS的重定向登录)DisableLoopbackCheck:设置为1(如果是本地测试站点,避免环回认证问题)
四、调试与验证步骤
- 用Fiddler抓包排查:点击ms-word链接时,捕获Office发送的请求,看是否有302重定向到ADFS登录页。如果没有重定向,说明WebDAV的认证配置没生效;如果有重定向但Office没弹出登录框,就是Office的注册表设置没到位。
- 浏览器验证WebDAV的ADFS认证:直接在浏览器中访问WebDAV的文档URL(比如
https://app.webdav/Documents/document.docx),看是否能正常跳转到ADFS登录,登录后能否下载文档。如果浏览器能正常访问,说明WebDAV的ADFS配置是对的,问题出在Office客户端。 - 检查文件权限:确保ADFS认证后的用户(或者转换后的Windows身份)对WebDAV目录有读写权限,否则即使认证过了也会提示“访问被拒绝”。
五、常见坑点提醒
- 会话不共享:浏览器的ADFS登录会话和Office客户端的是完全独立的,所以Office必须单独完成一次ADFS登录,不能复用浏览器的Cookie。
- WebDAV请求绕开OWIN:这是最常见的问题,一定要确保WebDAV的请求经过OWIN管道,否则OWIN的ADFS中间件无法处理认证。
- ADFS用户代理拦截:如果ADFS拒绝了Office的用户代理,直接会返回401,所以一定要把Office的用户代理添加到允许列表。
内容的提问来源于stack exchange,提问作者user1565840




