【发布时间】:2011-09-26 14:51:48
【问题描述】:
我对正确进行身份验证越来越感到沮丧。通常我会使用我不熟悉的术语,所以回答者会误解我的问题。它没有帮助但事实上这是一个有许多实现的案例。
所以现在我将尝试解释有关我的项目的事实和要求,以便我可以找到一个好的解决方案。
我将拥有一个包含我需要的信息的数据库。此信息中将包括用户名和密码的加盐哈希。此数据库将连接到 WCF Web 服务,该服务将数据提供给其他前端项目。
其中一个前端项目是一个 asp.net MVC 3 网站,用户将使用它来登录等。现在,此类项目中的默认值是某种 SQlMembership,在这种情况下是不正确的,因为此站点未连接到数据库(它甚至可能不是 MSQL 数据库)。
以下是我看过但不太清楚如何正确使用的实现。
1) 在 MVC 项目中编写我自己的 MembershipProvider,它将查询 WebService 以进行验证。这里我的意思是它只会调用一些方法来满足它的所有需求。不喜欢它的安全问题,客户端解决方案。
2) 使用服务端 MembershipProvider 进行验证,但是我必须在每个操作中发送用户名密码,并且出于安全原因我无法存储密码。
3) 然后我发现了一个叫做 WCF authenticationService http://msdn.microsoft.com/en-us/library/system.web.applicationservices.authenticationservice.aspx 的东西,它似乎是我需要的,但我在理解它是如何工作的时候遇到了问题。我不希望它成为我服务的一部分,但它似乎是一项专门的服务。它也没有真正解释它是如何进行身份验证的(我需要基于我的表进行自定义身份验证,而不是为我创建的一些默认表)。这是Should authentication be in a separate service for wcf? 的帖子,有同样的问题,我不确定如何解决。
WCF 身份验证服务能否成为适合我的工具?
你能为不懂asp.net、web或服务术语的人回答这个问题吗?
编辑
这是我希望但不确定是否存在的一种解决方案。
WCF 服务公开了在服务中定义的 MembershipProvider、RoleProvider、ProfileProvider。
在 MVC web.config 中的 members\providers\add 下,添加 MembershipProvider 以及指向服务的端点。与 RoleManager 等相同。
所以当我在 MVC 项目中调用 MembershipProvider 来验证用户时,它会自动调用服务并在那里检查,当它发生在 Authorize 属性上时,它还会自动检查服务中的 RoleProvider。
然而,我也想限制服务调用本身,即使它们在 [Authorized] 属性方法中,在引用 Web 服务的其他客户端中也可能不是这样。如果来自网站的呼叫能够自动访问 forms.authentication cookie,我们会很高兴。
【问题讨论】:
-
你有没有想过解决这个问题?我正朝着同样的方向前进……
标签: wcf asp.net-mvc-3 authentication asp.net-membership