![使用 Active Directory 和远程连接 IIS 进行 Docker 身份验证](https://linux22.com/image/1579744/%E4%BD%BF%E7%94%A8%20Active%20Directory%20%E5%92%8C%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5%20IIS%20%E8%BF%9B%E8%A1%8C%20Docker%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81.png)
我已经在容器内设置了 IIS,并且可以使用主机的 IIS 连接到该“服务器”。
下一步,我需要在里面托管一个 Web 应用程序(如果 Web 与 AD 无关,我已经成功完成了)
情况是,我们的 Web 应用程序需要使用我们的广告帐户进行身份验证,现在,如果我在容器内启动 Web,即使我输入正确的帐户 + pw,它仍然会给我
401 - 未授权:由于凭证无效,访问被拒绝。
那么...如何在容器内使用 AD?
我遇到了 gMSA
我登录到 AD 服务器并运行:
New-ADServiceAccount -Name ABC -PrincipalsAllowedToRetrieveManagedPassword ABC-Servers –DNSHostName ABC.domain.com
我进入安装了 Docker 的服务器并运行:
Import-Module ./CredentialSpec.psm1 New-CredentialSpec -Name ABC -AccountName ABC
使用以下命令启动新容器
--security-opt
和
ABC.json
但最后,它仍然要求我进行自我验证,无论我输入什么,都是 401......
顺便说一句,nltest /parentdomain 向我显示了广告服务器名称
答案1
我已经解决了。我错过了 setspn 和 -h 部分
该解决方案的一部分与以下链接相关: https://blogs.msdn.microsoft.com/containerstuff/2017/07/31/getting-iis-win-auth-to-work-in-a-container/
主机的主机名 = abcHost(通过在cmd中运行hostname来确认)
要完成此操作,首先,正如我提到的: 1. 登录 AD 服务器并运行:
New-ADServiceAccount -Name accountABC -PrincipalsAllowedToRetrieveManagedPassword ABC-Servers –DNSHostName abcHost.domain.com
- 转到安装了 Docker 的服务器(主机)并运行:Import-Module ./CredentialSpec.psm1 New-CredentialSpec -Name accountABC -AccountName accountABC
所以,我们现在有一个服务帐户:ABC 下一步是将机器名称与服务帐户链接起来,因此在广告服务器中运行 setspn:
setspn -c -s HTTP/abcHost domian\accountABC
之后,为了让容器使用服务帐户运行,我们需要在 Docker 运行中添加 -h 选项。与之前创建的 gMSA 帐户一起,命令将是:
Docker run -it --name accountABC -h accountABC -v <a directory> --security-opt "credentialspec=file://accountABC.json" myImage
然后,对于 IIS 应用程序,在“连接”面板 > 功能委派中选择该“服务器或容器”> 将所有“身份验证 - 某些内容”设置为读/写
然后就完成了