问题标签 [spn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
861 浏览

wcf - WCF 客户端的默认默认 SPN 是“host/myhostname”还是“http/myhostname”,为什么?

由于这个问题,指定no 时的默认行为identityhost/myhostname.

然而,这似乎并不完全正确。

我有一个 SOAP WCF 服务(它是一个 Dynamics NAV Web 服务,但这对于以下内容应该无关紧要,因为问题完全是关于客户端的角度),如果我不指定任何身份,它就不起作用。

服务器实际上是在域用户帐户下运行的。 host/myhostname指定但不针对此用户帐户,仅针对机器帐户。 http/myhostname为此域用户帐户指定。

让我们看三个场景:

未指定身份

EndpointAddress使用以下代码创建:

在这种情况下,会发生以下情况:

  • 没有标头的 HTTP POST Authorization
  • 用 响应WWW-Authenticate: Negotiate
  • 带有标头的 HTTP POST Authorization: Negotiate XXXXXX是 1584 个 BASE64 编码字节,以96 130 6. 我在里面找不到任何可读的 ASCII。
  • Authorization: Negotiate XXX带有标题的响应。XXX是 126 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。
  • 带有标头的 HTTP POST Authorization: Negotiate XXXXXX是 1527 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。
  • WWW-Authenticate: Negotiate XXX带有标题的响应。XXX是 113 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。
  • 此时客户端抛出异常。内部异常消息是The target principal name is incorrect.

手动将标识设置为host/myhostname错误的字符串。

我使用以下代码创建 EndpointAddress:

如果host/myhostname是默认设置,上面的代码将明确指定此默认设置。所以我会期待同样的行为。但这有效。看来我回到了 NTLM。所以肯定是有区别的

这是正在发生的事情:

  • 没有标头的 HTTP POST Authorization
  • 用 响应WWW-Authenticate: Negotiate
  • HTTP POST,Authorization: Negotiate XXX其中 XXX 是 40 个 BASE64 编码字节。第一个字节是 ASCII 字母NTLMSSP
  • 响应WWW-Authenticate: Negotiate XXX其中 XXX 是 270 个 BASE64 编码字节。第一个字节是 ASCII 字母NTLMSSP。FQDN 似乎也被编码为 ASCII。
  • 带有 的 HTTP POST Authorization: Negotiate XXX,其中 XXX 是 590 个 BASE64 编码字节。这次没有 ASCII 字母。
  • 以有效载荷响应。

一个有趣的事实:如果我为任何错误的字符串指定身份,我的行为完全相同。因此,例如,如果我EndpointAddress使用以下代码指定:

通过回退到 NTLM,我也得到了上述行为。

我正确地将身份设置为http/myhostname

现在,当我指定设置的 SPN并且由于RFC 4559http/myhostname似乎是正确的选择时,它可以工作。这是配置:

这就是正在发生的事情:

  • 没有标头的 HTTP POST Authorization
  • 用 响应WWW-Authenticate: Negotiate
  • 带有标头的 HTTP POST Authorization: Negotiate XXX。XXX 是 1580 BASE64 编码字节。没有 ASCI 迹象。
  • 以有效载荷响应。

这个问题不是关于让它工作的热度,而是关于理解。令我困惑的是第一个示例和第二个示例之间的区别。我的想法是:

  1. 如果默认身份是host/myhostname,
  2. 手动指定身份应该没有区别host/myhostname
  3. 但有区别
  4. 所以这不能是默认身份。

所以我的问题是

  1. 实际的默认行为是什么,以及
  2. 为什么http/myhostname由于 RFC4559 而没有被选为默认 SPN?

和/或我是否理解完全错误的事情?

0 投票
1 回答
1252 浏览

active-directory - Kerberos SPN 被缓存在 Windows 服务器上?

一直在我的 SSO 项目中集成 Kerberos 身份验证。遇到了一个奇特的场景。

我创建了一个新用户并为其附加了一个 SPN。按照这个问题的步骤,让一切正常。我的意思是:-

  1. kinit 用户名-然后输入密码给了我票已保存的消息。
  2. kinit spn(int the format HTTP/FQDN) - 然后输入密码给了我打勾的消息已保存。

过了一段时间,我决定再试一次,所以我使用了命令

从用户名中分离 spn。然后我从 AD 中删除了这个用户(用户名)。

接下来,我创建了一个新用户,说 username1 并按照这个问题为这个新用户注册了与上述步骤相同的 spn。

现在 kinit username1 - 输入密码给出了保存票证的消息,但是 kinit spn - 输入密码给了我错误

请注意,如果我使用不同的(新)spn,一切正常。

所以问题是,Windows 服务器是否有某些缓存,其中一些链接仍然存在,因为我无法再次使用这个 spn?还是我在从用户分离 spn 时犯了一些错误?

谢谢,尼基尔

0 投票
1 回答
721 浏览

active-directory - spn 命令由于服务帐户名称中的句点而失败

我们需要在我们的服务帐户中有一个 .svc,即

aduser.svc

以下 spn 命令失败

setspn -a SPNName/aduser.svc.domain.com aduser.svc

未知参数,请检查您的使用情况。

关于如何解决这个问题的任何想法?

0 投票
1 回答
1427 浏览

c# - 如何列出 Active Directory 计算机对象上“验证写入服务主体名称”和“写入服务主体名称”的权限

有人可以帮我解决以下问题吗

我正在尝试做与这篇文章非常相似的事情

Powershell:如何设置读/写服务主体名称 AD 权限?

基本上我不需要设置/更改权限,而是读取权限

在 AD (Active Directory) 中的计算机对象上,您“允许”用户、组或计算机对象(同一台计算机或另一台计算机对象)对计算机对象的以下属性/属性的“写入”权限

验证写入服务主体名称写入服务主体名称

因此,假设在计算机对象 Server01 上,用户 Domain\Fred 被“允许”“验证写入服务主体名称”并且“允许”“写入服务主体名称”

保罗、约翰和苏珊都拥有与弗雷德相同的权利

现在假设我在 AD 域中有 500 台计算机具有上述权利的组合

我想获取计算机对象(我知道如何使用 PowerShell 或 ADSI、.NET 来执行此操作)

然后我想列出谁对这些计算机对象拥有上述权限(这就是我坚持的一点)如何列出权限(而不是一次检查每个用户、组和计算机,看看他们是否是否拥有这些权利)查看谁可以为我的域中的计算机设置这些 SPN 相关值。

非常感谢 __AAnotheruser

0 投票
1 回答
1751 浏览

authentication - 您可以创建主机名灵活的 Kerberos 主体吗?(码头工人)

我特别尝试使用 Apache Storm (1.0.2) 来执行此操作,但它与任何使用 Kerberos 保护的服务相关。我正在尝试在 Docker 中运行一个安全的 Storm 集群。Storm 有许多开箱即用的 docker 镜像,它们在不安全的情况下工作得很好。我正在使用https://github.com/Baqend/docker-storm。我还让 Storm 在 RHEL VM 上安全运行。

但是,我的理解是 Kerberos 将主机名与委托人联系起来,所以如果我要让客户可以使用服务 foobar,我需要创建一个foobar/hostname@REALM. 然后客户端服务可能会hostname使用 principal连接foobar,Kerberos 将foobar/hostname@REALM在其数据库中查找,发现它在那里(因为我们创建了一个具有该名称的主体),并且一切都会正常工作。

在我的情况下,它在这里描述:https ://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.0/bk_installing_manually_book/content/configure_kerberos_for_storm.html 。nimbus 验证为storm/<nimbus host>@REALM,主管和外部客户端验证为storm/REALM。一切正常。

但在 2017 年,我们有了容器,主机名不再是静态的。那么我将如何对在 Docker 数据中心(或 Kubernetes 等)中运行的服务进行 Kerberize 处理?我必须将未知主机名附加到服务器身份验证。我想我可以为所有可能的主机名创建一个主体,并在启动时根据容器所在的位置动态选择正确的主机名,但这很笨拙。

我是否误解了 Kerberos 的工作原理?这里有我看不到的解决方案吗?我在网上看到很多人在 Docker 中运行 Storm 的例子,但我无法想象没有人的集群是安全的。

0 投票
2 回答
8081 浏览

authentication - 我无法从我的 ansible 主机通过 AD 向 Windows 机器进行身份验证。Ubuntu 16.10 上的“在 Kerberos 数据库中找不到服务器”

我无法从我的 ansible 主机通过 AD 向 Windows 机器进行身份验证。我有一张有效的 kerberos 票 -

我的 kerberos 配置对我来说看起来不错 -

运行测试命令时 - ansible windows -m win_ping -vvvvv我得到

我能够 ssh 到目标机器

我还可以用它们的主机名 ping 所有主机。我很茫然:(

这是ansible主机文件-

我还尝试使用 realmd 成功连接到域,但运行 ansible 命令产生了相同的结果。

0 投票
0 回答
1050 浏览

angularjs - Kerberos 身份验证适用于 IE,而不是 Chrome:401 错误

我已经设置了我的 Internet Explorer,以便它可以使用本地 Intranet 设置将 Active Directory 登录凭据传递给 Kerberos。据我所知,Chrome 只是从 IE 复制这些设置。但是,在 Chrome 而不是 IE 中发出 XHR 请求时,我收到 401 错误。当我在 Chrome 的新选项卡中打开请求时,没有错误,只有在通过 AngularJS 的 AJAX 请求期间。

我可以在 Chrome 中设置什么来修改它吗?我宁愿不继续在 IE 上进行开发工作,因为我更喜欢 Chrome 中的开发工具集/控制台。

0 投票
1 回答
387 浏览

linux - 在 Linux 上使用 Centrify 将 SPN 设置为与 UPN 相同

嗨,我正在 Linux 环境中使用 Centrify 配置 Kerberos。我对 Windows 更熟悉。

我知道在 Linux 中使用 MIT Kerberos,我可以使用 SPN 作为 UPN 创建一个新帐户。使用 Centrify 时的过程是否相同?

0 投票
1 回答
3272 浏览

authentication - Kerberos 身份验证票证 - 事件 ID 4768 - 审核失败

我正在使用 kerberos 来验证用户及其失败。事件查看器中的审核失败详细信息如下

结果代码 0x6 表示 Kerberos 数据库中不存在该用户,但我已经在 AD 中配置了一个用户。这是 Windows Server 2008(非 R2),用户帐户名为“axtest”,用户登录名为“ax/mytest”。域名是 test.com。从wireshark,我可以看到我的客户正在发送具有正确2个名称字符串项目ax和mytest的AS-REQ。我不确定它为什么会失败。

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

0 投票
1 回答
744 浏览

sql-server - PowerShell 中 SetSPN 命令的替代方法

我需要能够管理大型资产中的 SQL Server SPN,但是使用 setspn 命令有点太慢了。

是否有更快的 setspn 命令替代方法?也许在 ActiveDirectory PowerShell 模块中?

谢谢