我正在以完全断开连接的方式从Silverlight应用程序中消耗大量WCF服务。
我想确保我知道正在呼叫每项服务的用户,而我不知道是否有“标准方式”。
我想到了一个Login方法来获取令牌,然后在每次调用中传递用户名及其令牌,以确保他/她已被记录并有权执行它。
在我自己的SQL Server中,ASP.NET授权是否有“差不多完成”的方式?或者我只能使用它的表,但我必须“手动”???
提前致谢!!!
答案 0 :(得分:5)
听起来使用ASP.NET Membership可能非常适合您。您可以使用两种方法。第一种是使用由aspnet_regiis生成的默认成员资格表。此选项具有基本上为您完成的优势。在这种情况下,您需要做的就是运行aspnet_regiis工具,然后按照here所述为您的WCF服务添加必要的部分Web.config
。然后,在调用服务时,您需要按照here所述设置绑定凭据 - 特别是关于在使用服务时为绑定设置ClientCredential
的部分。
另一种选择是按照here所述编写自己的自定义成员资格提供程序。这使您可以在存储和管理用户方面做任何您想要的事情,而不是使用预先构建的ASP.NET机制。如果您与现有用户群交配或希望更好地控制事情的实施方式,这是一种很好的方法。
另外,请记住,ASP.NET Membership不是保护WCF服务的唯一选择。花些时间阅读您的选项,其中包括:
该列表来自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://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/8a679fb2-e67e-44a9-b491-eb95d5144068