Microsoft.AspNetCore.Authentication.Negotiate文档在这里介绍了如何将Kestrel配置为使用Windows身份验证:
Microsoft.AspNetCore.Authentication.Negotiate组件执行用户模式身份验证。必须添加服务主体名称(SPN(到运行服务的用户帐户,而不是机器帐户。在中执行setspn-S HTTP/myservername.mydomain.com myuser管理命令shell。
这很好用。但它并没有解释如果有多个应用程序在不同的用户下运行该怎么办。如果我尝试执行setspn -S HTTP/myservername.mydomain.com myuser; setspn -S HTTP/myservername.mydomain.com myuser2
,我会得到错误Duplicate SPN found, aborting operation!
。
我试图在注册SPN(setspn -S HTTP/myservername.mydomain.com:5000 myuser
(时使用该端口,但该注册似乎被忽略了。
是否不可能在不同用户的同一服务器上运行两个具有windows身份验证的asp.net核心应用程序,或者我必须以不同的方式注册?
服务主体名称在Active Directory中必须是唯一的,并且只能与单个服务帐户关联。
SPN是根据它们连接的主机名确定的,因此
https://foo.bar.com
相当于https://foo.bar.com:8234/baz
为了完整性,如果foo.bar.com
是CNAME记录,浏览器实际上将使用规范a记录(例如,foo.bar.com
=>srv1-ny-web.corp.bar.net
在搜索SPN时将使用后者(。
您有两种选择:在单独的(子(域上运行,或者对两者使用相同的帐户。对两者使用相同的帐户与使用机器帐户相同。为了获得更多相似性,请使用gMSA帐户,这样您就不必管理密码。