问题标签 [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.
wcf - WCF 客户端的默认默认 SPN 是“host/myhostname”还是“http/myhostname”,为什么?
由于这个问题,指定no 时的默认行为identity
是host/myhostname
.
然而,这似乎并不完全正确。
我有一个 SOAP WCF 服务(它是一个 Dynamics NAV Web 服务,但这对于以下内容应该无关紧要,因为问题完全是关于客户端的角度),如果我不指定任何身份,它就不起作用。
服务器实际上是在域用户帐户下运行的。
host/myhostname
指定但不针对此用户帐户,仅针对机器帐户。
http/myhostname
为此域用户帐户指定。
让我们看三个场景:
未指定身份
我EndpointAddress
使用以下代码创建:
在这种情况下,会发生以下情况:
- 没有标头的 HTTP POST
Authorization
。 - 用 响应
WWW-Authenticate: Negotiate
。 - 带有标头的 HTTP POST
Authorization: Negotiate XXX
。XXX
是 1584 个 BASE64 编码字节,以96 130 6
. 我在里面找不到任何可读的 ASCII。 Authorization: Negotiate XXX
带有标题的响应。XXX
是 126 个 BASE64 编码字节。我在里面找不到任何可读的 ASCII。- 带有标头的 HTTP POST
Authorization: Negotiate XXX
。XXX
是 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 迹象。 - 以有效载荷响应。
这个问题不是关于让它工作的热度,而是关于理解。令我困惑的是第一个示例和第二个示例之间的区别。我的想法是:
- 如果默认身份是
host/myhostname
, - 手动指定身份应该没有区别
host/myhostname
, - 但有区别
- 所以这不能是默认身份。
所以我的问题是
- 实际的默认行为是什么,以及
- 为什么
http/myhostname
由于 RFC4559 而没有被选为默认 SPN?
和/或我是否理解完全错误的事情?
active-directory - Kerberos SPN 被缓存在 Windows 服务器上?
一直在我的 SSO 项目中集成 Kerberos 身份验证。遇到了一个奇特的场景。
我创建了一个新用户并为其附加了一个 SPN。按照这个问题的步骤,让一切正常。我的意思是:-
- kinit 用户名-然后输入密码给了我票已保存的消息。
- kinit spn(int the format HTTP/FQDN) - 然后输入密码给了我打勾的消息已保存。
过了一段时间,我决定再试一次,所以我使用了命令
从用户名中分离 spn。然后我从 AD 中删除了这个用户(用户名)。
接下来,我创建了一个新用户,说 username1 并按照这个问题为这个新用户注册了与上述步骤相同的 spn。
现在 kinit username1 - 输入密码给出了保存票证的消息,但是 kinit spn - 输入密码给了我错误
请注意,如果我使用不同的(新)spn,一切正常。
所以问题是,Windows 服务器是否有某些缓存,其中一些链接仍然存在,因为我无法再次使用这个 spn?还是我在从用户分离 spn 时犯了一些错误?
谢谢,尼基尔
active-directory - spn 命令由于服务帐户名称中的句点而失败
我们需要在我们的服务帐户中有一个 .svc,即
aduser.svc
以下 spn 命令失败
setspn -a SPNName/aduser.svc.domain.com aduser.svc
未知参数,请检查您的使用情况。
关于如何解决这个问题的任何想法?
c# - 如何列出 Active Directory 计算机对象上“验证写入服务主体名称”和“写入服务主体名称”的权限
有人可以帮我解决以下问题吗
我正在尝试做与这篇文章非常相似的事情
Powershell:如何设置读/写服务主体名称 AD 权限?
基本上我不需要设置/更改权限,而是读取权限
在 AD (Active Directory) 中的计算机对象上,您“允许”用户、组或计算机对象(同一台计算机或另一台计算机对象)对计算机对象的以下属性/属性的“写入”权限
验证写入服务主体名称并写入服务主体名称
因此,假设在计算机对象 Server01 上,用户 Domain\Fred 被“允许”“验证写入服务主体名称”并且“允许”“写入服务主体名称”
保罗、约翰和苏珊都拥有与弗雷德相同的权利
现在假设我在 AD 域中有 500 台计算机具有上述权利的组合
我想获取计算机对象(我知道如何使用 PowerShell 或 ADSI、.NET 来执行此操作)
然后我想列出谁对这些计算机对象拥有上述权限(这就是我坚持的一点)如何列出权限(而不是一次检查每个用户、组和计算机,看看他们是否是否拥有这些权利)查看谁可以为我的域中的计算机设置这些 SPN 相关值。
非常感谢 __AAnotheruser
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 的例子,但我无法想象没有人的集群是安全的。
authentication - 我无法从我的 ansible 主机通过 AD 向 Windows 机器进行身份验证。Ubuntu 16.10 上的“在 Kerberos 数据库中找不到服务器”
我无法从我的 ansible 主机通过 AD 向 Windows 机器进行身份验证。我有一张有效的 kerberos 票 -
我的 kerberos 配置对我来说看起来不错 -
运行测试命令时 - ansible windows -m win_ping -vvvvv
我得到
我能够 ssh 到目标机器
我还可以用它们的主机名 ping 所有主机。我很茫然:(
这是ansible主机文件-
我还尝试使用 realmd 成功连接到域,但运行 ansible 命令产生了相同的结果。
angularjs - Kerberos 身份验证适用于 IE,而不是 Chrome:401 错误
我已经设置了我的 Internet Explorer,以便它可以使用本地 Intranet 设置将 Active Directory 登录凭据传递给 Kerberos。据我所知,Chrome 只是从 IE 复制这些设置。但是,在 Chrome 而不是 IE 中发出 XHR 请求时,我收到 401 错误。当我在 Chrome 的新选项卡中打开请求时,没有错误,只有在通过 AngularJS 的 AJAX 请求期间。
我可以在 Chrome 中设置什么来修改它吗?我宁愿不继续在 IE 上进行开发工作,因为我更喜欢 Chrome 中的开发工具集/控制台。
linux - 在 Linux 上使用 Centrify 将 SPN 设置为与 UPN 相同
嗨,我正在 Linux 环境中使用 Centrify 配置 Kerberos。我对 Windows 更熟悉。
我知道在 Linux 中使用 MIT Kerberos,我可以使用 SPN 作为 UPN 创建一个新帐户。使用 Centrify 时的过程是否相同?
sql-server - PowerShell 中 SetSPN 命令的替代方法
我需要能够管理大型资产中的 SQL Server SPN,但是使用 setspn 命令有点太慢了。
是否有更快的 setspn 命令替代方法?也许在 ActiveDirectory PowerShell 模块中?
谢谢