- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个 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-v-s-environment-machinename.html
现在,这似乎很难处理 IT 部门更改运行服务的帐户的情况。如果有的话,处理这个问题的模式是什么?其他人是如何处理的?我想到的一种解决方案是,当服务的用户帐户发生更改时,管理员会发送一封电子邮件,其中包含指向更新客户端或配置文件的应用程序的网络链接,因此客户端会引用新的用户帐户.但这似乎很老套。
不可否认,这很像端点移动的 URI。除此之外,我认为代表人们有更多的期望,即更改 URI 是客户必须知道的事情,但更改运行服务的帐户对客户来说应该是相对透明的。
顺便说一句,如果重要的话,这需要在 IIS 7.0 上托管。
最佳答案
我想你可以设置NegotiateServiceCredential属性设置为 True,以便您的绑定(bind)使用 SPNego而不是硬冷Kerberos .当设置为true时,客户端不需要指定SPN,它可以连接到运行非机器帐户的服务器。
请注意,由于客户端不再请求特定的 SPN,它无法再检测是否连接到服务的被劫持模仿者,但这通常是一个小问题,除非您真的对安全性很偏执。
此外,顺便说一句:WCF 将帐户名作为 SPN 请求的事实基本上是脑放屁。它的客户端应该使用 DsMakeSpn从服务名称、主机和端口组成 SPN 的 API。服务器应在启动时为其自身注册该 SPN,或者让管理员使用 setspn.exe 注册该 SPN。 .这是他们在 Kerberos/ActiveDirecotry/Windows 环境中通过所有传统(表现良好的)服务执行此操作的方式。
更新
第二,虽然我没有看到任何指定客户端必须使用帐户名作为 SPN 的内容。看起来更像是文档监督,而不是记录他们只是推荐基本上是不好的做法的正确方法。或者也许只是论坛的建议不好,因为我没有深入了解 MSDN 绑定(bind)规范实际上对要使用的 SPN 说了什么......
我没有方便测试的 WCF 环境,但也许您可以将客户端配置为请求适当的 SPN,如 YourService/server:port
并且您还在服务器端注册了相同的 SPN。手 Action 为留给管理员的练习,或者在服务启动时自动从您的服务中自动注册,并在关闭时取消注册。 正确的方法是让管理员来做,但实际上这很痛苦,大多数服务自己注册 SPN,您也可以遵循这种做法。要注册 SPN,您的服务调用 DsWriteAccountSpn .写入必须传播到 AD 并在 AD 服务器之间复制,这至少是为什么让服务自动注册/自动注销 SPN 是一种有问题的做法的原因之一。
如果您想了解更多关于 SPN 的奇妙世界以及它们如何破坏您的一天,您可以继续阅读 How Service Publication and Service Principal Names Work .
更新
我很确定您可以使用任何您喜欢的 SPN。那里的大多数示例使用帐户名称作为“UPN”(用户主体名称)而不是 SPN,但这只是为了示例的方便,因为使用真正的 SPN 会遇到在用户帐户下设置 SPN 的管理问题(再次,为什么管理员应该这样做...)。来自 Overriding the Identity of a Service for Authentication , 相关强调:
By default, when a service is configured to use a Windows credential, an element that contains a
<userPrincipalName>
or<servicePrincipalName>
element is generated in the WSDL. If the service is running under the LocalSystem, LocalService, or NetworkService account, a service principal name (SPN) is generated by default in the form ofhost/<hostname>
because those accounts have access to the computer's SPN data. If the service is running under a different account, Windows Communication Foundation (WCF) generates a UPN in the form of<username>@<domainName>
. This occurs because Kerberos authentication requires that a UPN or SPN be supplied to the client to authenticate the service.You can also use the Setspn.exe tool to register an additional SPN with a service's account in a domain. You can then use the SPN as the identity of the service. To download the tool, see Windows 2000 Resource Kit Tool : Setspn.exe. For more information about the tool, see Setspn Overview.
关于wcf - 服务器使用用户帐户的 WCF Kerberos 客户端模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149031/
谁能解释一下 Server.MapPath(".")、Server.MapPath("~")、Server.MapPath(@"之间的区别\") 和 Server.MapPath("/")? 最佳答案
我不知道,为什么我们要使用 Server.UrlEncode() & Server.UrlDecode()?!在 QueryString 中我们看到 URL 中的任何内容,那么为什么我们要对它们进行编
我已经通过 WHM 在我的一个域上安装了 ssl 证书。网站正在使用 https://xyz.com . 但是它不适用于 https://www.xyz.com .我已经检查了证书,它也适用于 www
我已经使用 WMI 检测操作系统上是否存在防病毒软件,itz 正常工作并通过使用命名空间向我显示防病毒信息,例如 win xp 和 window7 上的名称和实例 ID:\root\SecurityC
我们有 hive 0.10 版本,我们想知道是否应该使用 Hive Server 1 或 Hive Server2。另一个问题是连接到在端口 10000 上运行的 Hive 服务器,使用 3rd 方工
我想在 C++ 中使用 Windows Server API 设置一个 HTTPS 服务器,我使用了示例代码,它在 HTTP 上工作正常,但我就是不能让它在 HTTPS 上工作。 (我不想要客户端 S
我写了一个非常基本的类来发送电子邮件。我用 smtp 服务器对其进行了测试,它工作正常,但是当我尝试使用我公司的交换服务器时,它给出了这个异常: SMTP 服务器需要安全连接或客户端未通过身份验证。服
我的应用程序包含一个“网关”DataSnap REST 服务器,它是所有客户端的第一个访问点。根据客户端在请求中传递的用户名(基本身份验证),请求需要重定向到另一个 DataSnap 服务器。我的问题
我有一个 Tomcat 服务器和一个 Glassfish4 服务器。我的 Servlet 在 Tomcat 服务器上启动得很好,但在 Glassfish4 服务器上给我一个“HTTP Status 4
我在 vmware 上创建了一个 ubuntu 服务器。我用它作为文件服务器。如果我通过托管虚拟机的计算机进行连接,则可以访问它。我无法从同一网络上的其他计算机执行此操作。提前致谢! 最佳答案 首先确
如何重启 Rails 服务器?我从 开始 rails server -d 所以服务器是分离的 我知道的唯一方法就是去做ps 辅助 | grep rails 并 kill -9关于过程#但是像这样杀死进
我实际上正在尝试找到编写一个简单的 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的服务器。我只关心XMPP的核心功能(状态、消息传递、群组消息传递)。目前还在学习 XMPP 协议(proto
我实际上正在尝试找到编写简单 XMPP 服务器的最佳方法,或者找到一个占用空间非常小的方法。我只关心 XMPP 的核心功能(统计、消息、组消息)。目前也在学习 XMPP 协议(protocol),所以
我们正在尝试从 Java JAX-RS 适配器访问 SOAP 1.1 Web 服务。 我们正在使用从 WSDL 生成的 SOAP 客户端。 但是当解码 SOAP 故障时,我们得到以下异常: ... C
目前,我和许多其他人正在多个平台(Windows、OS X 和可能的 Linux)上使用 Python HTTP 服务器。我们正在使用 Python HTTP 服务器来测试 JavaScript 游戏
我有一个连续运行的服务器程序(C#/.NET 2.0 on Linux with mono),我想从 PHP 脚本连接到它以在网站上显示状态信息。 目的是创建一个(某种)实时浏览器游戏(无 Flash
所以我有一个单页客户端应用程序。 正常流程: 应用程序 -> OAuth2 服务器 -> 应用程序 我们有自己的 OAuth2 服务器,因此人们可以登录应用程序并获取与用户实体关联的 access_t
我们刚刚将测试 Web 服务器从 Server 2008 升级到 Server 2012 R2。我们有一个部署我们网站的批处理脚本。当它将站点推送到服务器时,它现在失败了。奇怪的是,我可以使用相同的发
建议一些加载SpagoBI服务器的方法,我尝试了所有方法来解析spagobi服务器。在 Catalina 中,错误是 - * SEVERE: Unable to process Jar entry [
当我们点击应用程序服务器(apache tomcat)时,它会创建一个线程来处理我们的请求并与 tomcat 连接,建立连接,tomcat 创建另一个线程来处理请求并将其传递给连接,连接线程将其传递给
我是一名优秀的程序员,十分优秀!