2013-01-20 115 views
0

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

但有很多因素要考虑到,所以我很困惑如何实现它为我的内联网商业应用项目。

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

  • 大多数情况下,ASP.NET兼容性将被禁用。

  • 协议将HTTP与basicHttpBinding的,但它可能需要二进制序列化,以尽量减少交通。

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

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

  • 所有的认证&授权应该在执行WCF操作之前透明地完成 - 不需要来自将创建WCF方法的程序员的额外努力。

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

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

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

回答

1

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

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