c# - 多层架构中的身份验证

标签 c# .net asp.net-mvc architecture asp.net-membership

我正在 .NET 中设计一个 N 层系统,它将包含

  • SQL Server 2008
  • EF 4
  • 存储库层
  • 服务层(业务逻辑)

除此之外我还有:

  • ASP.NET MVC 网站
  • 供其他客户端使用的外部 API(使用 WCF 或 ServceStack.NET 构建)

我想在 MVC 应用程序中实现典型的用户名/密码身份验证以及 OpenID/twitter/facebook 登录选项

api 将需要类似形式的身份验证。

体系结构中的哪个位置是实现身份验证的最佳位置?是否有关于如何使用 .NET 堆栈实现类似功能的示例?

是否可以选择自定义成员(member)资格提供程序?

我意识到有一些库可用于实现 openID 部分,因此目前这不是一个问题,但我想在未来添加它。

建议?

最佳答案

身份验证应在面向用户的点完成:MVC 网站和 WCF 服务。

在每一点中,使用适当的身份验证/授权机制。

MVC网站:表单认证(或windows认证等)

WCF 服务:(您将采用什么方法、API key 、每个请求的用户/名称密码、安全 key 、身份验证 cookie 等)

对于每个点,使用请求者(用户)使用的凭据调用服务层,并根据您的数据库(在服务层中)对其进行验证。

服务层应该为提供给它的凭据返回有效/无效。

如果它无效,让您的网站或网络服务拒绝用户的任何进一步操作并通知他们它无效。

如果它有效,让您的 MVC 网站创建身份验证 cookie (FormsAuthentication.SetAuthCookie),并且您的 WCF 服务针对您选择的身份验证机制执行适当的操作。

让您的服务层与身份验证无关。它应该只响应一组凭据是否有效,并且您的前端层应该负责设置身份验证票证。

对于 Open ID/Twitter/Facebook 登录,所有需要的信息都在网络应用程序上(通过登录源 cookie),因此请使用它来设置您网站的身份验证 cookie。

关于c# - 多层架构中的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7571538/

相关文章:

c# - .NET 属性网格 : Varying Read/Write rights for a complex object using ExpandableObjectConverter

javascript - 搜索具有下拉列表字段值的项目的 Ajax 返回数据

javascript - 直接在 HTTP 响应中执行 javascript

c# - 在 IIS 8 上运行应用程序时如何委派 Windows 身份验证 session ?

c# - sql 数据库错误 "Must declare the scalar variable"

c# - C#中使用[using]语句好还是[dispose]方法好?这是否适用于外部 (COM) 对象?

c# - 如何确定对象类型是否为内置系统类型

c# - 在 C# 中从禁用的 ListView 启用滚动条

.net - 使用 String.Format 在运行时指定小数位

.net - 如何重用 GridViewColumn CellTemplate 并允许不同的绑定(bind)?