每次通话都在WCF中进行身份验证

时间:2011-11-08 16:57:19

标签: silverlight wcf

我正在以完全断开连接的方式从Silverlight应用程序中消耗大量WCF服务。

我想确保我知道正在呼叫每项服务的用户,而我不知道是否有“标准方式”。

我想到了一个Login方法来获取令牌,然后在每次调用中传递用户名及其令牌,以确保他/她已被记录并有权执行它。

在我自己的SQL Server中,ASP.NET授权是否有“差不多完成”的方式?或者我只能使用它的表,但我必须“手动”???

提前致谢!!!

2 个答案:

答案 0 :(得分:5)

听起来使用ASP.NET Membership可能非常适合您。您可以使用两种方法。第一种是使用由aspnet_regiis生成的默认成员资格表。此选项具有基本上为您完成的优势。在这种情况下,您需要做的就是运行aspnet_regiis工具,然后按照here所述为您的WCF服务添加必要的部分Web.config。然后,在调用服务时,您需要按照here所述设置绑定凭据 - 特别是关于在使用服务时为绑定设置ClientCredential的部分。

另一种选择是按照here所述编写自己的自定义成员资格提供程序。这使您可以在存储和管理用户方面做任何您想要的事情,而不是使用预先构建的ASP.NET机制。如果您与现有用户群交配或希望更好地控制事情的实施方式,这是一种很好的方法。

另外,请记住,ASP.NET Membership不是保护WCF服务的唯一选择。花些时间阅读您的选项,其中包括:

  • 通过basicHttpBinding上的传输级别安全性进行Windows身份验证和Windows授权
  • Windows身份验证和Windows授权通过wsHttpBinding上的消息级别安全性
  • UsernamePasswordToken通过wsHttpBinding上的消息级安全性与ASP.NET成员身份和ASP.NET角色授权进行身份验证
  • UsernamePasswordToken通过wsHttpBinding上的消息级别安全性使用自定义验证程序进行身份验证
  • 使用自定义授权政策进行授权
  • 使用Windows凭据进行模拟

该列表来自this blog post,这是您开始探索选项的好地方。阅读它们将使您有机会了解每个的优点,缺点和功能,以便您可以选择最适合您目的的那个。您还可以从WCF安全性here上的MSDN文章开始。

总而言之,是的,有一种“差不多完成”的方式来实现ASP.NET成员资格,它实现起来应该不会太难,但是在潜水之前还需要一些时间来探索其他选项在一个,因为他们都有权衡,如果你决定你选择的方法不合适,你不希望将来重新实施它。

答案 1 :(得分:1)

执行此操作的一种方法是,如果您可以冒充所有用户,则需要在服务行为中添加以下内容

<serviceAuthorization    impersonateCallerForAllOperations="true"  />   

此处有更多详情http://msdn.microsoft.com/en-us/library/ms731090.aspx

如果您想了解用户,那么您可以使用

在服务方法中
 System.Threading.Thread.CurrentPrincipal.Identity.Name

查找使用您服务的用户名

编辑:

您可以在此处使用会员资格api详细信息

http://msdn.microsoft.com/en-us/library/ms731049.aspx

http://blogs.msdn.com/b/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx

http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/8a679fb2-e67e-44a9-b491-eb95d5144068