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

时间:2017-05-09 21:57:26

标签: c# wcf authentication inspector

这个问题不是关于可以做些什么的。一切都很好。我想知道,如果在WCF消息检查器中进行身份验证/授权过程是“可以的”。

目前我正在使用WPF客户端和自托管WCF服务器的客户端/服务器应用程序。使用的协议是Net.Tcp,所有SOAP消息都是AES256消息加密和签名的。此外,所有发送SOAP消息头的消息都经过消息加密和签名。

完整的身份验证流程如下所示:

  • 服务器和客户端都始终发送证书以进行相互身份验证
  • 客户端收到可以连接到的所有端点的列表
  • 客户端发送用户/密码进行身份验证,并从登录服务
  • 获取会话ID
  • session-id,user-id和与user-id关联的所有用户权限都存储在单个服务的RAM中,该服务在服务器应用程序内部可用于系统范围。
  • 在首次登录后的每一个进一步请求中,客户端仅在自定义消息标题内发送session-id和证书,不再有用户/通行证组合。

情况:

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

问题:

是否有任何错误,要在WCF检查器中执行身份验证/授权过程?

1 个答案:

答案 0 :(得分:1)

如果它的工作然后不打破它:)但是为了回答你,我已经提出了一些见解供您考虑:

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

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

我通常使用WCF检查器将令牌和其他相关信息传递到我的服务类中,我通常会实现交叉问题(验证,身份验证,授权,日志记录和异常处理)。当您将授权引擎注入服务时,您可以更容易地在需要时首先交换机制,第二个单元测试您的服务方法,而不依赖于您使用的任何身份验证机制。