尝试访问Dockerized WCF服务时出现403错误

作为一个总的.NET noob我试图dockerize传统的WCF服务,但即将到来

403 – 禁止:访问被拒绝。 您无权使用您提供的凭据查看此目录或页面。

客户端错误消息,同时试图达到他们。 这里是他们相关的configuration文件的一个片段:

<behaviors> <serviceBehaviors> <!-- This service provides service certificate. Username client credential expected --> <behavior name="WCFServiceTypeBehaviors" > <serviceMetadata httpGetEnabled="true" /> <serviceCredentials> <serviceCertificate findValue="XXXXXXXXXXXXXXXXXXXXXXXXXXXX" storeLocation="LocalMachine" storeName="My" x509FindType="FindByThumbprint" /> <clientCertificate> <authentication certificateValidationMode="None" /> </clientCertificate> <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="WCFServiceProject.UsernameValidator, App_Code" /> <issuedTokenAuthentication allowUntrustedRsaIssuers="true" /> </serviceCredentials> <serviceDebug includeExceptionDetailInFaults="true" /> </behavior> </serviceBehaviors> </behaviors> 

所以从我研究的东西看来,WCF似乎基于x509证书进行身份validation,显然我的Docker容器一旦启动就不会包含它们。 所以我写了一个简单的PowerShell脚本,它作为Docker镜像创build的一个步骤运行,为自己提供一个自签名证书:

 New-SelfSignedCertificate -Type Custom -Subject "CN=$companyName" -CertStoreLocation "cert:\LocalMachine\My" | Out-Null 

之后,它甚至将其复制到cert:\ LocalMachine \ root下,以便它可以作为受信任的根证书颁发机构,最后脚本使用新创build的证书的指纹编辑我的WFC服务的configuration的“findValue =”XXXXXXXXXXXXXXXXXXXXXXXXXXXX“”部分。

而达达,403又一次。 我知道我可能误解了一些步骤,但正如我所说我是一个总的.NET新手。

我敢肯定:当我将“docker exec -it powershell”放入容器并检查时,证书被创build并且WCF xmlconfiguration被正确更新。

我不确定的:还有其他的:)

任何帮助或咨询我的错误将不胜感激!

Interesting Posts