繁体   English   中英

在Docker容器ASP.NET应用程序中集成Windows身份验证

[英]Integrating Windows Authentication in Docker Container ASP.NET App

我已经从microsoft / aspnet存储库创建了一个容器。 我想在IIS中容纳一个ASP.NET 4.x Web应用程序,我可以在其中获取访问该站点的登录用户。 我希望能够利用集成的Windows身份验证,因为这是一个内部应用程序。

我已经为容器主机创建了一个透明的网络。

另外,我在容器内的IIS上设置了Windows身份验证。 我已经阅读了有关在容器主机上创建组托管服务帐户的信息,但我还没有这样做,不确定这是否足够,或者我不得不采取进一步措施。

创建组托管服务帐户(gMSA)只是您需要采取的步骤之一,以使Windows身份验证与容器一起使用。 您还需要一个凭据规范,其中包含有关您创建的gMSA的信息,并且容器将使用它来交换应用程序的应用程序池使用的内置帐户(LocalSystem,NetworkService,ApplicationPoolIdentity)的gMSA帐户。

实际上,最小的步骤是:

1)创建一个AD组,您可以使用该组添加将用于托管容器的计算机。

PS> New-ADGroup "Container Hosts" -GroupScope Global
PS> $group = Get-ADGroup "Container Hosts"
PS> $host = Get-ADComputer "mydockerhostmachine"
PS> Add-ADGroupMember $group -Members $host

2)创建用于您的应用的gMSA帐户:

PS> New-ADServiceAccount -name myapp -DNSHostName myapp.mydomain.local -ServicePrincipalNames http/myapp.mydomain.local -PrincipalsAllowedToRetrieveManagedPassword "Container Hosts"

PrincipalsAllowedToRetrieveManagePassword的值应该是您在步骤1中创建的AD组的名称。

3)然后,在每个容器主机上:

一个。 安装Powershell Active Directory模块并进行测试,以确保您能够使用主机中的gMSA:

PS> Add-WindowsFeature RSAT-AD-PowerShell    
PS> Import-Module ActiveDirectory    
PS> Install-AdServiceAccount myapp    
PS> Test-AdServiceAccount myapp

安装Credential Spec Powershell模块并创建凭证规范:

PS> Invoke-WebRequest https://raw.githubusercontent.com/Microsoft/Virtualization-Documentation/live/windows-server-container-tools/ServiceAccounts/CredentialSpec.psm1 -OutFile CredentialSpec.psm1
PS> Import-Module .\CredentialSpec.psm1
PS> New-CredentialSpec -Name myapp -AccountName myapp

C。 现在,如果一切都配置正确,您可以使用此凭据规范运行容器:

docker run --security-opt "credentialspec=file://myapp.json" -d -p
80:80 -h myapp.mydomain.local [my-image-name:tag]

要注意以上事项 - 确保在创建gMSA时使用的服务主体名称与容器的主机名(-h参数)匹配。 否则,如果您的应用程序使用Windows身份验证访问其他域资源或服务(例如,SQL Server),则会出现问题。 此外,如果要访问SQL Server等其他资源,请确保还为这些服务提供gMSA帐户的相应权限。

最后,在创建Dockerfile时,请勿尝试将gMSA帐户直接分配给您的应用池。 使用其中一个内置帐户,让引擎为您更换容器中的帐户。 换句话说,您在Dockerfile中创建的应用程序池应该看起来像这样:

RUN Import-Module WebAdministration; `
    New-Item -Path IIS:\AppPools\MyAppPool; `
    Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name managedRuntimeVersion -Value 'v4.0'; `
    Set-ItemProperty -Path IIS:\AppPools\MyAppPool -Name processModel -value @{identitytype='ApplicationPoolIdentity'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM