我有一个 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 结束时遗漏了一步。