我在Server 2012 R2上配置了带有自定义属性存储的ADFS。这导致ADFS调用承载在Windows服务中的WCF服务。调试Microsoft.IdentityServer.ServiceHost.exe
时,以下代码抛出一个CommunicationException
:
var channel = trustChannelFactory.CreateChannel();
rawToken = channel.Issue(rst, out rstr);
trustChannelFactory.Close();
异常详细信息为:
HTTP请求未经客户端身份验证方案授权"协商"。从服务器接收的身份验证标头为"协商"。
检查上面的rst
,我可以看到ADFS正试图调用Windows服务托管的WCF:
net.tcp://<url>:8002/service/endpoint
我确保windows服务正在运行,并通过powershell在TCP 8002上侦听:
netstat -aonp TCP | Select-String 8002
Get-Process -Id
但奇怪的是,无论Windows服务是否正在运行,我都会收到这个错误。这就像来自ADFS的出站连接在某个地方被阻止了。
我试过关闭Windows防火墙,但没有什么区别。
由于此版本的ADFS不依赖IIS,而且是Windows服务,所以SO上的许多答案都不适用(我认为)。
我的调试技能和ADFS知识已经达到了极限。不幸的是,我没有设置这个系统,我也无法访问那些设置了这个系统的人。
如有任何建议,我们将不胜感激。
事实证明,401 Unauthorized位于ADFShttps://<ADFS_HOST>/adfs/services/trust/13/windowstransport
的windows端点上。
这与ADFS配置、证书、权限等无关。
我顺着台阶进去了https://www.risual.com/2011/10/28/adfs-2-0-401-unauthorized-access/在注册表中禁用LookBackCheck,一切都成功了。