WCF的自定义身份验证、授权和会话

WCF的自定义身份验证、授权和会话,wcf,custom-authentication,Wcf,Custom Authentication,我读过关于WCF身份验证和授权的各种实现,从重用一些内置的.NET和WCF特性开始,到完全自定义的实现结束 但是要考虑的因素太多了,所以我对如何在我的intranet业务应用程序项目中实现它感到困惑 以下是我需要的: -WCF.NET 4.5服务将托管在IIS 7或更新版本中 很可能会禁用ASP.NET兼容性 协议将是带有BasicHttpBinding的HTTP,但它可能需要二进制序列化以最小化通信量 WCF方法将接收一个自定义会话ID,该ID将根据数据库中的用户会话对象进行检查。此项目中不

我读过关于WCF身份验证和授权的各种实现,从重用一些内置的.NET和WCF特性开始,到完全自定义的实现结束

但是要考虑的因素太多了,所以我对如何在我的intranet业务应用程序项目中实现它感到困惑

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

  • 很可能会禁用ASP.NET兼容性

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

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

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

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

  • 在执行身份验证时,我需要访问正在执行的WCF操作名,以便在用户没有执行该操作的权限时引发异常

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


实现我的auth例程最简单的方法是什么?我应该使用自定义绑定吗?习惯行为?某种内置的请求事件处理程序(确切地说是哪一个,如果ASP.NET兼容性被禁用,它们会工作吗)?授权策略(看起来有点过分,因为我不会使用它的大部分内置功能)?还有什么吗?

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

您可以查看文章和,特别是IDispatchMessageInspector接口,该接口提供“AfterReceiveRequest”和“BeforeReceivePly”方法