WCF:消息检查器中的身份验证/授权是一个好的设计吗?

WCF: Is Authentication / Authorization inside a message inspector a good design?

这个问题不是关于如何做某事的。一切正常。我想知道,是否 "ok" 在 WCF 消息检查器中执行身份验证/授权过程。

目前我正在使用 WPF 客户端和 self-hosted WCF 服务器开发 client/server 应用程序。使用的协议是 Net.Tcp,所有 SOAP 消息都是 AES256 message-encrypted 并签名。此外,所有发送的 SOAP message-headers 始终 message-encrypted 并已签名。

完整的认证过程是这样的:

情况:

在来自客户端的请求到达任何网络服务操作之前,消息检查器会读取 session-id 和请求的网络服务操作。然后它使用可用的 singleton-service 来确定 session-id 是否仍然有效以及关联的 user-id 是否有权执行此 Web 服务操作。如果不是,则抛出 fault-exception。

问题:

在 WCF 检查器中执行身份验证/授权过程是否有什么问题

如果它能正常工作就不要破坏它:)但是为了回答你,我提出了一些见解供你考虑:

1- 对于不需要身份验证的服务操作,您必须更改检查器代码以将它们列入白名单。这与开闭原则相矛盾,在开闭原则中,您的 class 必须对扩展开放,对修改关闭。

2- 如果以后您决定修改您的身份验证机制并使用第三方组件,您将不得不彻底修改您的拦截器代码。

我通常使用 WCF 检查器将令牌和其他相关信息传递到我的服务 classes 中,我通常在其中实现横切关注点(验证、身份验证、授权、日志记录和异常处理)。当您将授权引擎注入您的服务时,您可以更轻松地首先在需要时交换该机制,然后在隔离您正在使用的任何身份验证机制的情况下对您的服务方法进行单元测试。