【问题标题】:How to determine user is authenticated in WCF service如何确定用户在 WCF 服务中是否经过身份验证
【发布时间】:2012-12-30 19:14:22
【问题描述】:

我是 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,客户端将在调用任何方法时将该令牌作为消息头传递......我有不知道如何实现它,甚至我也不知道它是否是最好的。所以寻求指导和建议。谢谢

【问题讨论】:

    标签: wcf


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-02
      • 2018-01-16
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      相关资源
      最近更新 更多