Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过使用C的SOA方法进行身份验证#_C#_Wcf_Asp.net Membership - Fatal编程技术网

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

C# 通过使用C的SOA方法进行身份验证#,c#,wcf,asp.net-membership,C#,Wcf,Asp.net Membership,我正在重建一个网站,并尝试使用SOA方法。当前网站位于.NET2.0中,使用现成的SqlMembershipProvider 我们试图消除与数据库的直接连接,并通过WCF服务层推送所有内容。我们用于此的方法是将所有内容分开—有一个用于模型和接口的库,一个用于服务的库,然后是一个用于服务代理的库 到目前为止,最大的障碍是弄清楚如何管理用户身份验证及其会话。使用这种方法的最佳方法是什么 我们是否应该放弃.NET成员模型,使用类似OpenId的东西,只允许用户将数据重新连接到新帐户 我已经做了一些搜索

我正在重建一个网站,并尝试使用SOA方法。当前网站位于.NET2.0中,使用现成的SqlMembershipProvider

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

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

我们是否应该放弃.NET成员模型,使用类似OpenId的东西,只允许用户将数据重新连接到新帐户


我已经做了一些搜索,但是找不到很多关于如何管理它的信息,尽管我知道以前已经做过了。

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

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


我希望这能有所帮助。也许有人提出了一种更标准的WCF会话状态替代方案,但我不知道是否如此。

如果不了解您所需的设置,很难提供具体的答案

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

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

是一本关于将ASP.NET成员资格模型与WCF结合使用的好书

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


如果您已经投资于收集用户的凭据以使用SQLMembership provider,那么可以通过基于ADFS+声明的模型将其公开。这将适用于上述所有3种情况。不过还有一点需要学习的地方

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

所以我在我的ServiceContracts库中创建了一个称为IMembership的接口。首先,我将其创建为一个类,并从MembershipProvider继承,以便获得为我生成的所有方法存根。一旦它们被生成,我就修改了存根并将其制作成一个接口

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

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

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

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

还有维奥拉,我在做生意


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

基本上,我试图实现的是用WCF成员资格提供程序替换Sql成员资格提供程序。我正在尝试从DMZ中删除所有与内部SQL Server的直接连接,并且只使用服务。我已经研究了WCF提供的身份验证服务,但是似乎没有一种简单的方法可以在我自己的客户机代理库中实现它,而不部署服务并使用命令行工具创建我想要避免的代理。我可能只会为auth创建我的服务,并创建一个自定义的提供者与之交互。这是一个基于您的回答的问题。如果只有您的网站(而没有其他机构)需要与您的WCF服务对话,那么为什么要在每次web服务调用时使用用户的凭据进行身份验证?这本质上(例如)意味着您必须将用户的密码保存在会话变量中,并将其传递给每个服务调用。我可能可以进一步抽象这一点,但它可以满足我现在的需要。