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

时间:2013-01-20 18:16:59

标签: wcf custom-authentication

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

但是需要考虑很多因素,所以我对如何为我的Intranet业务应用程序项目实现它感到困惑。

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

  • 最有可能的是,ASP.NET兼容性将被禁用。

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

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

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

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

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

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

哪种方法是实现我的身份验证例程最直接的方式?我应该使用自定义绑定吗?自定义行为?某种内置的请求事件处理程序(确切地说,如果禁用ASP.NET兼容性,它们会工作吗?)授权政策(似乎有点矫枉过正,因为我不会使用其大部分内置功能)?还有别的吗?

1 个答案:

答案 0 :(得分:1)

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

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