如何确定用户在WCF服务中进行身份验证

时间:2012-12-30 19:14:22

标签: wcf

我是wcf的新手,所以有一个问题就像wcf和用户身份验证一样困扰我。通常在asp.net中我发送用户名和密码,并在服务器端根据数据库进行验证,如果用户有效,则我在会话中存储一些数据,并在每个页面中检查会话以及会话是否存在且存储为true对于该会话中的该用户,我让页面执行,否则我将用户重定向到登录页面。所以我想知道如何在wcf中实现这种用户身份验证。我想当第一次用户将调用我的服务的任何方法然后他将通过凭证,如果凭证是好的,那么他可以调用我的服务的任何方法。请指导我怎么能在wcf中做到这一点。在wcf中如何为会话中的每个用户存储会话中的任何数据....有什么办法吗?

我搜索谷歌并找到一个像http://blog.adnanmasood.com/2010/04/29/step-by-step-guide-for-authenticating-wcf-service-with-username-and-password-over-ssl/

但是这里有人注意到来电者通过用户名&密码,但代码看起来像用户名和密码两次像

private static void Main(string[] args)
 {
    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(
         delegate { return true; });

     var client = new WcfServiceClient();
     GetCredentials();
     client.ClientCredentials.UserName.UserName = username;
     client.ClientCredentials.UserName.Password = password;
     Console.Write(client.GetData(1));
     client.Close();
     Console.Read();
 }

...但为什么两个用户名和密码来 UserName.UserName 它看起来很丑陋。 让我最好地了解如何在第一次调用我的服务时对用户进行身份验证,然后进行身份验证,然后从下次他可以调用我的服务的任何方法而不提供凭据。

有人告诉我开发用于验证user.once用户身份验证的服务然后服务将为每个wcf客户端提供一些唯一的令牌ID,并且当调用任何方法时客户端将该令牌作为消息头传递......我有不知道如何实现它,甚至我不知道它是否是最好的。所以寻找指导和建议。感谢

1 个答案:

答案 0 :(得分:1)

处理WCF身份验证的最常用方法是让客户端程序一次请求用户名和密码(或从配置文件中检索它),并让客户端程序为每个服务调用提供它。可以在http://msdn.microsoft.com/en-us/library/ff405740.aspx找到一些示例。

替代方案是拥有用户会话,这通常是一个坏主意。会话不容易扩展,有客户端和服务器平台兼容性考虑等...