我已经阅读了有关 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 兼容性,它们会起作用)?授权策略(似乎有点矫枉过正,因为无论如何我都不会使用它的大部分内置功能)?还有什么?