为Windows窗体或WPF独立应用程序实现ASP.NET窗体身份验证和授权

为Windows窗体或WPF独立应用程序实现ASP.NET窗体身份验证和授权,asp.net,forms-authentication,wcf-security,asp.net-authorization,web-to-winforms,Asp.net,Forms Authentication,Wcf Security,Asp.net Authorization,Web To Winforms,我想为与ASP.NET WCF(和SOAP)web服务通信的Windows窗体或WPF应用程序实现ASP.NET窗体身份验证和授权过程 使用Fiddler,我调查了Silverlight在登录/注销过程中如何与WCF RIA Services web服务通信,就我所见,这种通信只是一组POST和GET HTTP调用 据我所知,实际的身份验证和授权是通过ASP.NET成员身份和角色提供程序在WCF服务端进行的,我知道如何通过代码处理这一点 我不确定的是,在WinForms/WPF应用程序和ASP.

我想为与ASP.NET WCF(和SOAP)web服务通信的Windows窗体或WPF应用程序实现ASP.NET窗体身份验证和授权过程

使用Fiddler,我调查了Silverlight在登录/注销过程中如何与WCF RIA Services web服务通信,就我所见,这种通信只是一组POST和GET HTTP调用

据我所知,实际的身份验证和授权是通过ASP.NET成员身份和角色提供程序在WCF服务端进行的,我知道如何通过代码处理这一点


我不确定的是,在WinForms/WPF应用程序和ASP.Net WCF(/如果可能还包括SOAP)Web服务之间实现ASP.Net表单身份验证和授权的最高级System.Net类集及其方法,登录后通信会话保持活动状态,使用ASP.NET服务/应用程序cookie,尽可能透明地在这里和那里传输(在没有太多低级C#/.NET框架编程的情况下)。System.Net.WebClient是否足以实现我的任务?你知道任何现成的简单开源C#解决方案吗

几年前我就写过这篇博客

其想法是共享表单身份验证cookie,以便wcf服务也由其保护。通过这种方式,您甚至可以在浏览器中运行应用程序(clickonce),或者实现一个自定义登录表单,该表单只需将用户名/pwd发送到服务器并获取cookie,然后使用它


从技术上讲,要使用表单cookie保护wcf服务,您需要注意几个关键元素,所有这些都在我的博客文章中描述。

感谢您的回复。如果我得到了正确的答案,您是在从登录到ASP.NET站点的用户“借用”ClickOnce应用程序中的ASP.NET表单身份验证cookie吗?我的任务是直接从WinForms/WPF应用程序登录到ASP.NET WCF/SOAP web服务,并在WinForms/WPF应用程序通过System.NET.WebClient实例与web服务通信时保持此登录连接处于活动状态(使用自动流动的身份验证cookie尽可能轻松)。我想这是可能的。看看如何在login@ShamilS上创建cookie:再一次,你可以在你的服务中有一个方法,从用户那里获取任何东西并发布cookie。通过这种方式,您可以直接从winforms应用程序登录到wcf服务。另外,忘记webclient,改用服务代理,或者至少使用ChannelFactory。这将为您节省很多精力。谢谢您的补充说明。如果我将其视为您所说的,如果我使用服务代理(/ChannelFactory)而不是System.Net.WebClient,并且我将拥有web服务的登录、GetReport和注销方法,其中登录将发出FormsAuthentication.SetAuthCookie(userName,false)[在此调用之前验证用户名/密码],GetReport将使用-if(Thread.CurrentPrincipal.Identity.IsAuthenticated){…,在登录中创建的Cookie将在服务器和客户端之间自动流动,直到注销web调用通过FormsAuthentication.SignOut()丢弃Cookie为止?@ShamilS:是的,这正是应该做的。