我正在 .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/