1

我是 wcf 的新手,所以有一个问题困扰着我,比如 wcf 和用户身份验证。通常在asp.net中,我发送用户名和密码,并在服务器端对数据库进行验证,如果用户有效,那么我将一些数据存储在会话中,在每个页面中我检查会话,如果会话存在并且存储为真对于该会话中的该用户,然后我让页面执行,否则我将用户重定向到登录页面。所以我想知道如何在 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它看起来很丑陋。给我一个最好的主意,当他们第一次调用我的服务时如何针对 DB 对用户进行身份验证,并且一旦通过身份验证,然后从下一次他可以调用我的服务的任何方法而无需提供凭据。

有人告诉我为验证用户开发服务。一旦用户验证,那么服务将为每个 wcf 客户端提供一些唯一的令牌 ID,客户端将在调用任何方法时将该令牌作为消息头传递......我不知道如何实施它,甚至我也不知道它是否是最好的。所以寻求指导和建议。谢谢

4

1 回答 1

1

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

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

于 2012-12-30T19:40:51.153 回答