0

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

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

我发现了几个 .NET 3.5 示例,其中对 .asmx Web 服务使用 CAS 身份验证,或者针对不使用 ClientBase 并内置身份验证工具的 WCF 数据服务提供身份验证,但我找不到任何纯 WCF 示例. 任何人都可以向我指出可以实现这种情况的指令吗?我在这个项目中使用 .NET 4.0。

我也发现了这个 stackoverflow 问题,但是对于 .asmx Web 服务而不是 WCF 再次回答了这个问题。

我得到的最接近的方法是创建一个OperationContextScope,然后将 cookie 标头从ClientFormsIdentity对象复制到一个HttpRequestMessageProperty并将其添加到OutgoingMessageProperties当前的OperationContext. 然后我在OperationContextScope. 问题是,当我访问 WCF 服务时,我仍然看不到任何类似于身份验证的东西,因为我可以识别原始用户。这种方法取自各种示例,但我显然在 WCF 结束时遗漏了一步。

4

2 回答 2

1

我认为您需要切换到 Microsoft 现在让人们用于 WCF 服务的 Web API。查看通过 Web API 使用表单身份验证http://aamirposwal.blogspot.com/2012/05/aspnet-web-api-custom-authorize-and.html

于 2012-12-20T20:30:57.580 回答
0

找到了。

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

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

于 2012-12-21T13:58:04.750 回答