2008-12-16 15 views
2

我有一个Web服务(WCF或ASMX无所谓)...我做了一个控制台应用程序,右键单击,增加服务参考。到现在为止还挺好。ASP.NET兼容模式下的WCF服务 - 什么是最简单的方式来传递用户名/密码

但是,我不能为我的生活传递“安全”证书到我的服务。这是我的客户端代码:

var client = new MyClient(); 

client.ClientCredentials.UserName.UserName = "bob"; 
client.ClientCredentials.UserName.Password = "123!!"; 

client.HelloWorld(); 

client.Close(); 

但在服务器上,无论我做什么(上下车,WCF服务,ASMX服务,自定义HTTP处理程序等aspnetcompant模式)......我无法找到'鲍勃:123 !!'任何地方。不在头文件中,不在HttpContext.Current.User.Identiy.Name中,而不在Thread.CurrentPrincipal中...没有。

我在这里错过了什么?

回答

2

是的我有,显然如果你不使用SSL,.Net会抛出一个异常。所以显然你不能做我想要的没有SSL。

+0

有了框架,您使用?WCF/SSL在3.5(或SP1)中发生了一些变化 – 2008-12-21 11:01:14

0

您是否在端点绑定上配置了UserName(消息安全性)或Basic(传输安全性)客户端凭证类型?

0

从我的理解,WCF做消息级别的身份验证,而不是集成的身份验证。在任何情况下,我不知道将凭据传递的东西,你可以不使用SSL做...

你试过(通过IIS)打开匿名身份验证的端点?据我所知,WCF使用消息级安全性(在消息头中传递的用户名/密码)而不是HTTP头(用于集成身份验证方法,如Windows集成,SPNego等)

我发现的一些链接...

0

如果我正确理解你的问题,您已成功配置我们一个WCF服务的ername身份验证(对不起,我将重点介绍WCF),并且希望在您的服务方法中访问用户名和密码。

您可以通过访问ServiceSecurityContext.Current.PrimaryIdentity的用户名,我不相信你可以轻松地访问密码。

一个建议我在网上找到的,我真的不喜欢,是你的自定义验证,以保持用户名和密码的字典,这你可以从一个用户名后面的代码中访问。

我不喜欢这个,原因有几个 - 其中一个 - 你不应该真的有权访问密码,两个 - 我不知道这是多么安全,三个 - 如果可能有重复的用户名(我知道一些系统在这种情况下),你最终可能会得到错误的系统。

4

你检查这篇文章的自定义验证:http://www.leastprivilege.com/FinallyUsernamesOverTransportAuthenticationInWCF.aspx

此外,当我开始处理这件事时,有一件事帮助我禁用匿名访问Web服务器的该目录。当您未通过身份验证时,HttpContext.Current.User.Identity.Name始终会返回一个空字符串。因此,它可能看起来像你正在进行身份验证,只是不能“找到”用户名,但实际上你是匿名登录的。至少在禁用匿名访问的情况下,您将会遇到异常,并且可以更轻松地找出身份验证方面,这是最难的部分。

0

你有没有试过访问它? (特别是如果你使用的是自己的认证系统和你自己的UsernamePasssword和证书验证。

System.ServiceModel.ServiceSecurityContext.Current.PrimaryIdentity.Name 

你可以得到来电者的名字,但没有密码。

相关问题