来自身份服务器3的外部登录(通过ADFS)以http状态代码504进行响应



我从客户那里收到了联盟元数据端点,我用来在identityserver3中配置WsFederationAuthentication。

从身份服务器登录重定向到adfs登录页面的开发人员机器,一切都很好,但在将解决方案部署到AWS弹性豆茎(位于私有子网中(后,当我尝试通过外部(adfs(登录时,我会收到504 HTTP状态码。

我在《邮差》中模拟了这个场景。我在开发人员机器中收到302响应,但在AWS ec2实例中,请求从未结束(邮递员结果窗格显示"正在加载…"(。

我能够从AWS ec2实例浏览联盟元数据URL和/adfs/ls端点。

在idnetity服务器日志中,我可以看到下面的日志,

提供商请求外部登录:adfs

外部身份提供商的触发挑战

HTTP响应

{
"StatusCode": 401,
"Headers": {
"Content-Type": [
"text/html"
],
"Server": [
"Microsoft-IIS/10.0"
],
"Content-Length": [
"0"
]
},   
"Body": ""
}

在此之后,网关超时发生(由AWS负载均衡器(。

根据Microsoft.Owin.Security.WsFederation.WsFederationAuthenticationHandler.cs中的代码,从ApplyResponseChallengeSync((方法,重定向响应应使用具有adfs登录页URL的位置标头生成。但是,这并没有发生。

我在HTTPError.Log.中看到以下错误

GET
/identity/external?provider=adfs&signin=699036641a8b2b6ddccea61bc8c1f715 --
1 Connection_Abandoned_By_ReqQueue DefaultAppPool

我在事件查看器日志中没有看到任何与上述HTTP错误相关的事件。

我搜索了上面的错误,但解决方案没有为这个问题产生任何好的结果。

我使用进程监控工具进行了进一步的调查,比较了本地和aws ec2实例之间针对identityserver外部登录端点请求的tcp操作,然后我发现在aws ec2实例中tcp连接后立即发生tcp断开操作,但在本地没有发生这种情况,而是建立了tcp通信,tcp通信进行得很好。

使用wireshark工具进一步调查,然后我发现在客户端Hello呼叫后,AWS ec2实例中发生了握手失败。然后我比较了TLS版本和本地机器使用的密码套件(来自wireshark日志(,我发现本地机器使用TLS 1.2和密码套件的区别:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xc030(

AWS ec2实例使用的是ADFS服务器不支持的TLS 1.0。因此无法建立tcp连接,导致握手失败。

我关注了这个链接https://learn.microsoft.com/en-us/officeonlineserver/enable-tls-1-1-and-tls-1-2-support-in-office-online-server#enable-strong-cryptography-in-net-framework-45-or-higher使.net framewrok可以使用强加密。

此注册表更新后,可以通过身份服务器3登录页面从外部idp(ADFS(成功登录。

相关内容

最新更新