我有一个WCF Web服务,我想使用基本身份验证。我在认证选项中迷失了方法:
system.web
下,有一个<authentication mode="Windows"/>
标记在网站的web.config文件中,system.serviceModel
下,我可以配置:
<wsHttpBinding> <binding name="MyBinding"> <security mode="Transport"> <transport clientCredentialType="Basic"/> </security> </binding> </wsHttpBinding>
这三者有什么区别?应如何配置?
某些上下文:我有一个包含单个.svc
Web服务的简单网站项目,我希望它使用基于SSL的基本身份验证。 (另外,我希望它不使用Windows帐户,但也许这是另一个问题。)
答案 0 :(得分:1)
前两个实际上是关于访问IIS6中的ASP.NET虚拟目录或虚拟应用程序 - 基本上与WCF无关(WCF实际上不是部分也不依赖于ASP.NET)。这些设置控制如何在身份验证方面处理进入IIS6 Web服务器的HTTP请求。这基本上控制来自互联网的匿名呼叫者是否可以在不进行身份验证的情况下直接呼入,或者是否需要输入用户名/密码,或者是否只允许在此域中具有有效Windows身份的呼叫者。
这对您的WCF服务感兴趣的唯一原因是,当您在IIS中托管WCF服务(只有众多选项中的一个)时,您有一个(myservice).svc
文件需要驻留在虚拟目录。当然,对该SVC文件的访问权限由IIS6 / ASP.NET的身份验证设置控制。
<wsHttpBinding>
部分中的安全模式是WCF服务与其客户端通信的安全相关定义。模式=传输意味着,您正在保护实际的传输层 - 通常使用SSL - 而不是单独的每条消息。此设置在Intranet场景中运行良好,在这些场景中,您拥有公司防火墙后面的所有客户端 - 但它在Internet场景中无法正常工作,因为您无法真正控制整个链从客户端(此行星上的任何位置)系列中介跳到你的服务器 - 你不能。在这种情况下,您必须使用Mode = Message,它基本上对通过线路传输的每条消息进行加密和签名 - 在从原点到服务器的过程中,可以在任意数量的路由器和中继上运行。
答案 1 :(得分:0)
前两个是相关的,如果它们不匹配,您的服务将无法激活。如果您明确选择Windows身份验证,则假设您将绑定到Windows域或本地计算机。
由于您将要进行SSL基本身份验证,因此您将此设置为“无”,然后配置传输安全性。
Your one stop shop for setting up transport + basic authentication
MSDN Article on Transport+Username + Windows Forms
我不确定您是否还在计划如何进行安全保护,但我建议您考虑使用邮件安全与传输(个人偏向于邮件安全)。