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

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

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

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

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

我已经做了一些搜索,并且找不到很多关于如何管理这个,但我知道它已经完成了。

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

所以我进入了ServiceContracts库并创建了一个名为IMembership的界面。 起初,我创建它作为一个类并inheritance自MembershipProvider,以便我可以获得为我生成的所有方法存根。 生成它们后,我修改了存根并使其成为一个接口。

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

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

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

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

中提琴 – 我在做生意。

很多重复的代码,但它很好用。

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

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

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

很难提供具体的答案,而不需要了解更多关于您想要的设置。

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

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

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

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

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