- 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/
我已经开始配置 kerberos。 谁能解释我们在 krb5.conf 文件中设置的票证生命周期和更新生命周期。 ticket_lifetime = 2d renew_lifetime = 7d 是
kerberos 只加密身份验证过程还是所有客户端通信? 我的印象是它就像 LAN 的 VPN。 以便所有 LAN 通信都被加密。就像所有互联网通信都通过 VPN 加密一样。 问候奥布里 最佳答案 K
我试图弄清楚kerberos身份验证是如何工作的,但我发现的信息总是缺少一些东西,就好像其中的一部分被认为是理所当然的。我大致了解该过程,但缺少一些细节。 获取 TGT: 首先,用户应从 KDC 获取
是否可以进行可选的 kerberos 身份验证? 我想要的是:如果客户端(浏览器)不在域中,它被重定向到用户名/密码网络登录。否则它会做 SPNEGO 做 Kerberos 认证。 有什么解决办法吗?
目前正在寻找使用 AD 的联合服务器。首先想到的是使用 ADFS 来管理跨域和领域的服务请求。也就是说,应用程序必须有权访问特定用例的 Kerberos 票证。 AD FS 是否在任何时候使用 Ker
我们想通过 Polybase 将我们的 SQL Server 2016 Enterprise 与我们的 Kerberized OnPrem Hadoop-Cluster 和 Cloudera 5.14
哪个性能测试工具支持带有 Kerberos 身份验证的网页? 仅仅回退到 NTLM 的工具是不够的。 最佳答案 我做了一些研究,可用工具列表是: Visual Studio 2010 Load tes
据我了解, SPN 是 Windows 服务的身份验证工具。 Kerberos 是一个用户认证服务 SPNEGO-GSSAPI 是第三方 API能够使用这些服务。 SSPI:是发送的中立层从 SPNE
我知道中央身份验证服务(CAS)和Kerberos都可以用于对建立 session 进行身份验证。这两种协议(protocol)至少涉及三方,并且将创建票证授予票证持续时间身份验证,那么CAS之间有哪
是否可以进行可选的 kerberos 身份验证? 我想要的是:如果客户端(浏览器)不在域上,它将被重定向到用户名/密码 Web 登录。否则它将执行 SPNEGO 执行 Kerberos 身份验证。 如
在我的 Kerberos 系统中: 运行 kinit test并输入 passwd ,成功。 通过 kadmin.local -q "xst -k test.keytab test" 生成 key 表
如何从 NIFI 连接到启用 Kerberos 的 Kudu? 我只看到一个处理器可以访问 Kudu - PutKUDU 并且它不支持 Kerberos。我没有在网上看到任何有关使用 Kerberos
我正在处理与数据库的 kerberized 连接。我想我了解kerberization的基础知识。用户请求KDC的“Authentication Server”部分获取TGT(Ticket Grant
情况如下: 我在 Windows 7 上使用 MIT Kerberos 客户端 kfw 4.0.1 执行此操作。我正在通过 OpenVPN 连接到使用 Kerberos 5 保护的 YARN 集群。这
我在我的机器上使用 MIT kerberos 5 对用户进行身份验证。这会将票证授予用户。我想将票的 maxlife 重置超过 24 小时。默认情况下,kerberos 票证的最长生命周期为 24 小
我最近提出了一个问题,涉及我在让 MIT Kerberos 与 Microsoft 的 LSA 凭据缓存良好配合时遇到的一些问题。 有人告诉我,设置注册表项 AllowTGTSessionKey 应该
我确实有一个具有 KERBEROS 安全性的 Hadoop 集群和另一个没有 KERBEROS 的 Hadoop 集群。 我可以将文件从 KERBEROS hadoop 集群复制到非 KERBEROS
这来自 Kerberos 示例应用程序,位于 https://github.com/spring-projects/spring-security-kerberos/tree/master/sprin
我正在尝试在启用 Kerberos 身份验证的安全模式下设置单节点 Hadoop 集群,使用 hadoop-2.4.0和 jdk1.7.0_25 . 为此,我按照文档中的描述创建了 key 表文件。在
最近使用 Kerberos 安装 samba 共享停止工作。在另一台服务器上具有相同挂载选项的相同共享有效。所以我假设我们的 DNS 设置和/或 Active Directory 设置没有任何问题。似
我是一名优秀的程序员,十分优秀!