WCF - 这是一个好的安全架构吗?

信息安全 验证 授权 wcf 建筑学
2021-08-19 18:04:06

我正在为员工通过 Internet 访问的企业构建信息记录系统(基于 WCF)。该软件不会分发,只有少数用户安装了客户端应用程序。

由于存储的信息高度敏感,我显然想对任何服务请求进行身份验证和授权。因此,将有大约 4 个服务端点专门用于处理各种请求。为了保护这些服务,我正在考虑使用基于令牌的系统(实际上只是一个 GUID)对任何请求进行身份验证。这意味着除非客户端使用此令牌打包他们的请求,否则他们无法访问这些服务!对?现在,为了检索有效令牌,客户端必须连接到安全令牌服务,该服务以相互 SSL 身份验证开始(以防止中间人攻击),然后用户必须提供他们的登录详细信息(加密当然),然后如果详细信息是有效的,它们将提供一个令牌。然后记录令牌以及用户详细信息。现在客户端可以向其他服务发送有效请求。当其他服务之一收到请求时,将根据“当前用户存储”检查令牌和用户凭据并检索其角色。如果用户的角色允许该请求,则会对其进行处理。

在此处输入图像描述

对不起,如果这有点啰嗦!但基本上我要问的是安全专家:这听起来像这个系统的体面架构吗?我应该做任何改进吗?还是我应该把这个架构全部废弃并去做别的事情?(如果是这样,任何指导将不胜感激!)

我尊重我不是安全向导,但我愿意学习!所以请保持友善;)

1个回答

如果您知道自己在做什么,那么使用 WCF 并不难。如果您知道自己在做什么,那么将 WCF 与 STS 结合使用并不是非常困难。如果您不知道自己在做什么,那将非常困难。我在开玩笑,这是 WCF,所以这一切都很困难。:)

一般来说,您的架构属于联合信任类别,因为您使用 STS 提供身份验证。我对您为什么说令牌实际上只是一个 GUID 感到有些困惑。通常对于 WCF,它是一个 SAML(包装在 WS-Trust 容器中)令牌,其中包含有关给定身份的属性/声明。很多时候,用户的角色已经包含在令牌中。由 STS 提供角色,您的服务只需检查传入的身份是否具有必要的角色(无论如何,在一个简单的场景中)。

从安全的角度来看,由于以下几个原因,这一切都变得有点混乱:

  • WCF 是一个 PITA
  • WCF 安全性严重依赖证书,证书会引入自己的问题
  • STS 很难安全构建,因此建议使用预构建 STS
  • 使用预先构建的 STS 很少做你希望他们开箱即用的事情

如果您可以解决这些问题,您就可以合理安全地实施服务,但这与您想要保护的内容有关。您想要防范什么您不想/不愿意防范什么?

联邦系统的最薄弱环节之一是加密。您如何保护密钥以便 STS 可以使用它们,但人们不能窃取它们?您说您想使用客户端证书进行相互身份验证......客户端如何保护这些密钥?你是如何发行这些密钥的?您说 SSL 相互身份验证的客户端证书......这是否包括用户 STS 身份验证的基于证书的身份验证,还是您要使用用户名/密码?您是要在 STS->client->service 之间加密令牌,还是会是明文?通常你会加密令牌,因为它包含敏感信息。您如何保护服务的加密密钥?

联合信任是一个很好的架构,但它实际上取决于用例。通常是当您希望将用户的身份验证/授权与服务本身分离,并将它们集中到单个源中时。由于您有 4 项服务,因此听起来这可能是件好事。然而,STS 增加了巨大的开销(现在它变成了 5 个服务),而且它通常托管在它自己的站点中。

有关更多信息,请查看 Thinktecture.IdentityServer 项目:http ://thinktecture.github.io/Thinktecture.IdentityServer.v2/ 。它是由与 Microsoft 的 WCF 和 WIF 团队密切合作的人员构建的开源 STS。