使用C#通过SOA方法进行身份验证

时间:2011-03-08 19:16:26

标签: c# wcf asp.net-membership

我正在重建网站,我正在尝试使用SOA方法。当前网站使用的是.NET 2.0,并使用现成的SqlMembershipProvider。

我们正试图消除与数据库的直接连接,并通过WCF服务层推送所有内容。我们正在使用的方法是将所有内容分开 - 有一个用于模型和接口的库,一个用于服务的库,以及一个用于服务代理的库。

到目前为止,最大的障碍是弄清楚如何管理用户身份验证及其会话。采用这种方法的最佳方法是什么。

我们是否应该废弃.NET成员资格模型并使用类似OpenId的内容,并且只允许用户将其数据重新连接到新帐户?

我已经做了一些搜索,但是找不到很多如何管理它,虽然我知道它已经完成了。

3 个答案:

答案 0 :(得分:1)

这是我最终做的事情,以防有人感兴趣。我开始使用WCF身份验证服务,但后来意识到它没有给我我想要的一切。我可以登录和关闭,但仍然需要创建我自己的注册方法并获得MembershipUser。

所以我进入了ServiceContracts库并创建了一个名为IMembership的界面。首先,我将它创建为一个类,并继承自MembershipProvider,以便我可以获取为我生成的所有方法存根。生成它们后,我修改了存根并使其成为一个接口。

然后我进入我的服务库并创建了简单的接口实现,因为对于实现我只使用了Membership.Provider ....

然后在我的服务提供商客户端库中,我执行了IMembership接口的常规实现,也继承自ClientBase<>。在它旁边,我创建了一个WCFMembershipProvider,它实现了MembershipProvider,并从我刚创建的MembershipClient中调用了方法。

在托管WCF服务的WebApp中,我在web.config中设置了我的SQL成员资格提供程序,然后为该服务创建了我的svc文件和端点。

在消费网络应用程序中,我刚刚将服务客户端引用添加到svc,然后为我的WCFMembershipProvider设置成员资格提供程序。

中提琴 - 我在做生意。

很多重复的代码,但效果很好。

答案 1 :(得分:0)

尝试创建WCF服务并保持会话状态等效时遇到的主要问题是没有cookie(因为没有浏览器来维护它们),因此.NET成员资格提供程序不会默认情况下非常有帮助。我知道我如何处理等效问题是让生成的令牌(例如,Guid)与我需要维护的状态信息相对应。

但是,您的问题更多是关于身份验证。我不知道你能通过WCF使OpenId实现工作(虽然我知道它适用于普通的旧ASPX)。您可以只使用一个简单的用户名/密码身份验证方案(如果您需要它来处理数据库中的密码加密,可以手动使用MembershipProvider),并且您可以使用(很可能)传输服务的用户名和密码安全性(SSL)。

我希望这会有所帮助。也许有人为WCF提出了一个更标准的会话状态替换,但如果是这样我就不知道了。

答案 2 :(得分:0)

在不了解您所需设置的情况下,很难提供具体答案。

您是否计划将您的WCF服务公开为独立于您网站的公共访问?您的网页是否可以通过AJAX直接访问您的WCF服务?

最简单的方案可能是严格的分层部署UI仅与网站对话,只有网站与WCF服务对话。

http://msdn.microsoft.com/en-us/library/ms731049.aspx是使用ASP.NET成员模型和WCF的一个很好的读物。

我构建了一个使用AJAX与WCF服务层通信的站点。我们在WCF中使用了表单身份验证提供程序。它工作得很好,除了没有一种优雅的方式来处理通过Web服务登录。在我们的情况下,这很好,因为我们希望用户通过输入凭证进入网站并登录。

如果您已经投资收集用户的凭据以使用SQLMembership提供程序,则可以通过基于ADFS +声明的模型来表示它。这适用于上述所有3种情况。

虽然有一些学习要做