我们正在尝试在AWS实例上自我托管(而不是IIS)的WCF服务。在同一台机器上有一个STS和一个服务主机作为单独的Windows服务运行。用户应该能够从不同的地理位置/域访问该服务,因此我们不会使用Windows安全性。
端点和基址在app.config中定义,在启动时读取。使用的是IP地址,没有主机名。
我们遇到的问题是无法从外部源访问该服务(禁用防火墙)。如果使用公共IP地址,服务主机将不会启动,因此服务被配置为使用私有IP地址,但似乎私有IP地址被传递回客户端,这显然不起作用。我的问题是,我们应该考虑哪些配置更改才能使服务可访问?我们需要自定义元数据提供程序吗?
服务器已安装证书。传输数据有一些安全要求,因此使用了ws2007HttpBinding
,ws2007FederationHttpBinding
,wsHttpBinding
和ws2007HttpBinding
。
一些例子:
绑定到公共AWS主机名(ec2-54-xxx-xxx-xxx.compute-1.amazonaws.com),这与绑定到公共IP地址相同 - STS启动但服务主机失败,
System.ServiceModel.Security.SecurityNegotiationException: The caller was not authenticated by the service. ---> System.ServiceModel.FaultException: The request for security token could not be satisfied because authentication failed.
公共IP地址是否存在信任问题?
绑定到私有IP地址:
There was no endpoint listening at https://172.xxx.xxx.xxx:6040/MySTS/UsernameOverTransport that could accept the message
这是有道理的,因为私有IP地址是私有的。
我尝试使用hostNameComparisonMode="Exact / WeakWildcard / StrongWildcard"
配置绑定,但这似乎没有什么区别。同时确保<message>
establishSecurityContext="false"
没有{{1}}也没有变化。