我有一个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端的一步。
答案 0 :(得分:1)
我认为您需要切换到Microsoft现在让人们用于WCF服务的Web API。查看Using Forms Authentication with Web API和http://aamirposwal.blogspot.com/2012/05/aspnet-web-api-custom-authorize-and.html
答案 1 :(得分:0)
找到它。
在我的绑定中,我指定了allowCookies =“true”。
根据Wiktor Zychla,“将BasicHttpBinding上的AllowCookies属性设置为true会打开自动cookie管理” - 这意味着任何在代码中设置cookie的尝试都将被忽略,这就是我正在做的事情