0

我已经阅读了有关 WCF 身份验证和授权的各种实现,从重用一些内置的 .NET 和 WCF 功能开始,到以完全自定义的实现结束。

但是要考虑的因素太多了,所以我对如何为我的内网业务应用项目实现它感到困惑。

这是我需要的: - WCF .NET 4.5 服务将托管在 IIS 7 或更高版本中。

  • 很可能,ASP.NET 兼容性将被禁用。

  • 协议将是带有 BasicHttpBinding 的 HTTP,但它可能需要二进制序列化以最小化流量。

  • WCF 方法将接收一个自定义会话 ID,该 ID 将根据数据库中的用户会话对象进行检查。此项目中不允许使用 .NET 会话。

  • 服务收到 ID 后,会读取相应的用户数据(包括授权标志,查看是否允许用户执行当前操作)并进行验证。如果数据无效,则会抛出异常,不会执行 WCF 操作。如果验证成功,用户的身份将存储在当前操作上下文(以及当前线程主体)中,以便在 WCF 操作执行期间各种组件可以访问它。

  • 所有的身份验证和授权都应该在执行 WCF 操作之前透明地完成 - 不需要创建 WCF 方法的程序员的额外努力。

  • 当我执行身份验证验证时,我需要访问正在执行的 WCF 操作名称,因此如果用户没有执行操作的权限,我可以抛出异常。

  • 测试人员将使用 SoapUI,因此他们需要能够通过标准 SOAP 或 HTTP 标头传递会话 ID。

哪个是实现我的身份验证例程的最直接的方法?我应该使用自定义绑定吗?自定义行为?某种内置的请求事件处理程序(究竟是哪一个,如果禁用 ASP.NET 兼容性,它们会起作用)?授权策略(似乎有点矫枉过正,因为无论如何我都不会使用它的大部分内置功能)?还有什么?

4

1 回答 1

1

您可以尝试使用消息检查器。您的会话 ID 可以像令牌一样通过 SOAP 或 HTTP 标头传递,并且在 WCF执行实际服务操作之前,将通过您定义的行为进行检查。

您可以在此处此处查看文章,特别关注提供“AfterReceiveRequest”和“BeforeReceiveReply”方法的 IDispatchMessageInspector 接口。

于 2013-01-20T19:20:54.687 回答