Kan*_* Su 2 deployment wcf kerberos wcf-security
我们有一个WCF(Windows Communication Foundation)客户端和服务应用程序.我们正在使用带有Kerberos的Windows身份验证.
问题是该服务可能在许多帐户中运行(可能是网络服务,可能是特定的用户帐户 - 取决于IT组).这个帐户不太可能每天都有变化,但可能会发生变化(可能每隔几个月).此外,我们将此客户端/服务包提供给多个组,每个组可能拥有自己用于运行服务的帐户(这只是让您知道我们无法为单个团队执行自定义解决方案).
现在上述段落成为问题的原因显然是如果服务未在SYSTEM或NETWORK SERVICE帐户(即用户帐户)中运行,则客户端必须在其端点的标识中指定用户帐户的名称.
有关此限制的更多信息,请参阅:http: //social.msdn.microsoft.com/Forums/en-US/wcf/thread/feb6bc31-9a4b-4f8d-a887-ef6d2c7abe41 和http://www.vistax64.com/indigo /146204-using-localhost-vs-environment-machinename.html
现在,这似乎很难处理IT部门更改服务运行的帐户的情况.如果有的话,处理这个的模式是什么?别人怎么处理这个?我想到的一个解决方案是,当服务的用户帐户发生更改时,管理员会发送一封电子邮件,其中包含指向更新客户端或配置文件的应用程序的网络链接,因此客户端引用新的用户帐户.但这似乎是黑客.
不可否认,这很像移动端点的URI.除此之外,我认为代表人们有更多的期望,更改URI是客户端应该知道的事情,但更改运行服务的帐户应该对客户端相对透明.
顺便说一下,如果这很重要,这需要在IIS 7.0上托管.
我认为您可以将NegotiateServiceCredential属性设置为True,因此您的绑定使用SPNego而不是硬酷的Kerberos.如果设置为true,则客户端不需要指定SPN,它可以连接到运行非计算机帐户的服务器.
请注意,由于客户端不再请求特定SPN,因此它无法再检测是否连接到服务的被劫持模仿者,但这通常是一个小问题,除非您对安全性非常偏执.
此外,作为一个侧面咆哮:WCF请求作为SPN的事实,帐户名称基本上是一个脑屁.它客户端应该使用DsMakeSpn API从服务名称,主机和端口组成SPN.服务器应该在启动时为其指定SPN,或者让管理员使用setspn.exe执行此操作.这是Kerberos/ActiveDirecotry/Windows环境中所有传统(表现良好)服务的方式.
更新
第二,虽然我没有看到任何指定客户端必须使用帐户名称作为SPN的内容.看起来更像是文档疏忽,而不是记录他们刚刚推荐的正确方法,这基本上是一种不好的做法.或者只是论坛建议很糟糕,因为我没有挖掘MSDN绑定规范实际上对SPN使用的内容......
我没有方便测试的WCF环境,但也许你可以配置客户端请求正确的SPN YourService/server:port
,你也可以在服务器端注册相同的SPN.手动将其作为练习留给管理员,或者在启动时自动从您的服务中取出,并在关闭时取消注册.在适当的做的方式是让管理员做到这一点,但在现实中是这样的,大多数服务注册SPN自己痛苦,你或许可以遵循这种做法太.要注册SPN,您的服务会调用DsWriteAccountSpn.写入必须传播到AD并在AD服务器之间进行复制,这至少有一个原因使服务自动注册/自动注销SPN是一个值得怀疑的做法.
如果您想进一步了解SPN的奇妙世界以及它们如何破坏您的一天,您可以阅读服务出版物和服务主体名称的工作原理.
更新
我很确定你可以使用你喜欢的任何SPN.大多数exmaples使用帐户名称作为"UPN"(用户主体名称)而不是SPN,但这只是为了方便样本,因为使用真正的SPN会遇到在用户帐户下设置SPN的管理问题(再次,为什么管理员应该这样做...).从覆盖认证服务的身份,相关强调:
默认情况下,当服务配置为使用Windows凭据时,会在WSDL中生成包含
<userPrincipalName>
或<servicePrincipalName>
元素的元素.如果服务在LocalSystem,LocalService或NetworkService帐户下运行,则默认情况下会生成服务主体名称(SPN),host/<hostname>
因为这些帐户可以访问计算机的SPN数据.如果服务在其他帐户下运行,Windows Communication Foundation(WCF)将以.的形式生成UPN<username>@<domainName>
.发生这种情况是因为Kerberos身份验证要求将UPN或SPN提供给客户端以对服务进行身份验证.您还可以使用Setspn.exe工具向域中的服务帐户注册其他SPN.然后,您可以使用SPN作为服务的标识.要下载该工具,请参阅Windows 2000 Resource Kit工具:Setspn.exe.有关该工具的更多信息,请参阅Setspn概述.
归档时间: |
|
查看次数: |
2715 次 |
最近记录: |