ASP.NET客户端应用程序服务身份验证和WCF

时间:2012-12-20 11:37:17

标签: wcf .net-4.0 forms-authentication asp.net-4.0

我有一个WPF应用程序,它使用客户端应用程序服务来允许对使用Forms身份验证的相关Web应用程序和SqlMembershipProvider / SqlProfileProvider / SqlRoleProvider进行身份验证(用户名/密码登录)。这一切都有效,我可以可靠地验证用户/密码组合。

WPF应用程序还调用许多WCF服务,这些服务由与CAS身份验证相同的Web应用程序公开。我现在希望能够将身份验证详细信息(从客户端应用程序服务)传递到WCF服务,以便我可以识别在这些服务中经过身份验证的用户。如果没有进行身份验证,我还需要能够阻止使用WCF服务。

我找到了几个.NET 3.5示例,其中CAS身份验证用于.asmx Web服务,或者针对WCF数据服务提供身份验证,该服务不使用ClientBase并且内置了身份验证工具,但我找不到任何示例与纯WCF。任何人都可以指出我将启用此方案的指令吗?我在这个项目中使用.NET 4.0。

我也找到了this stackoverflow question但是这个问题再次针对.asmx网络服务而不是WCF进行了解答。

我得到的最接近的内容涉及创建OperationContextScope,然后将Cookie标头从ClientFormsIdentity对象复制到HttpRequestMessageProperty并将其添加到OutgoingMessageProperties当前的OperationContext。然后,我在OperationContextScope的生命周期内调用一个或多个服务方法。事实上,当我进入WCF服务时,我仍然看不到任何类似于身份验证的东西,因为我可以识别原始用户。这种方法取自各种例子,但我显然错过了WCF端的一步。

2 个答案:

答案 0 :(得分:1)

我认为您需要切换到Microsoft现在让人们用于WCF服务的Web API。查看Using Forms Authentication with Web APIhttp://aamirposwal.blogspot.com/2012/05/aspnet-web-api-custom-authorize-and.html

答案 1 :(得分:0)

找到它。

在我的绑定中,我指定了allowCookies =“true”。

根据Wiktor Zychla,“将BasicHttpBinding上的AllowCookies属性设置为true会打开自动cookie管理” - 这意味着任何在代码中设置cookie的尝试都将被忽略,这就是我正在做的事情