繁体   English   中英

使用WCF和Entity Framework在分层应用程序中实现身份验证和授权的最简单方法

[英]Simplest way of implementing authentication and authorization in layered application with WCF and Entity Framework

我正在设计(并将实现)“任务管理”的分层应用程序。
我想使用ASP.NET MVC(不是条件)并使用WCF(任何类型的Web服务)在服务器和客户端(在mvc情况下为数据库和控制器)之间进行通信。 我想用WCF做到这一点,因为稍后可能会有一个桌面客户端(它可能仅提供部分功能,但仍然...)。
到目前为止,我有几个想法:

----服务(业务逻辑)-WCF
-存储库
-ORM:实体框架
-DB:MsSQL

这应该是整个系统的基础(或者说是服务器)。 客户端应该是ASP.NET MVC或Silverlight中的Web应用程序,也应该是桌面应用程序(任何技术,Silverlight,表格或Adobe Flex)。

到目前为止的主要问题:

  1. 我不知道哪个更好(更容易):尝试以某种方式实现默认的asp.net成员身份,并以某种方式将其与任务表(和项目等)粘合在一起。 还是应该尝试修改asp.net成员资格以使用自己的用户表? 我需要用户能够在我的应用程序中更改其详细信息或创建新用户等(而不是使用ASP.NET配置工具)。 所以我认为,我将需要找到一些简单的方法来使用asp.net成员身份,但要使用我的users表。

  2. 我不知道在哪里以及如何进行用户身份验证和授权。 我喜欢在控制器上使用属性,也就是说,除非用户在某个组中,否则无法访问该控制器。 但是我认为,这样一来,我只能保护客户端,而服务器仍然不安全。 因此,当有人获得服务的地址时,他可以调用该服务并获取数据。 我不知道在这种情况下保护服务安全的最简单方法是什么。 我是否应该在每个服务的操作中添加一个额外的参数,以提供每次服务都会检查的用户名和密码? 我不认为这是正确的解决方案。

我真的对此感到困惑。因为协议,服务和类型的种类太多了。 我迷路了。 同样从到目前为止我所看到的,趋势全都在于REST。 当我仅提供实体上下文并且可以使用CRUD应用程序时,这当然很酷,并且有很棒的Visual Studio模板,例如WCF数据服务。 但是我不是在创建公共服务,而是为所有用户提供了一个存储有数据的存储,每个用户只能看到他的数据。

3-有没有简单的方法,如何从Entity Framework生成可序列化的实体? 我已经读了几篇有关“金属”工具的文章,它们可以使LINQ to SQL实体可序列化,因此我可以传输它们。 我只想知道是否有更好的方法,然后将我的所有实体重写为复合类型(很多重新映射)。

抱歉,如果这看起来太混乱了。 我对.Net相当陌生,而且技术和原理太多了,因此很难一次全部使用。 我可能还缺少一些关系和明显的解决方案...

感谢您的任何提示

我们使用类似的架构,但是使用NHibernate而不是EF。

  1. ASP.NET成员资格提供程序旨在支持您所讨论的方案。 您可以创建自己的System.Web.Security.MembershipProvider子类。 这使您可以映射所有函数以针对自己的表进行操作。

  2. 您是完全正确的-这需要在服务器上进行。 您需要研究System.IdentityModel.Policy.IAuthorizationPolicy。 此接口使您可以自定义WCF服务上的授权处理。 这可以基于名称/密码,Windows身份验证甚至基于声明的授权。

  3. 无法帮助进行EF序列化-但是使用NHibernate,我们有两个选择:i)创建要在线路上传输的DTO并映射到DTO /从DTO映射,或者ii)创建自定义序列化程序以处理循环引用等。我们走了第二条路线。

我唯一的其他建议是质疑如果使用EF是否需要存储库层。 为什么服务实现逻辑不能直接处理EF?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM