我正在考虑微服务架构的设计,为了安全起见,我正在考虑 AuthenticationMicroservice 它将负责生成新的 jwt 令牌,然后还有一个 spring 云网关,我的疑问是,如果我们想保持单一责任原则,网关应该接收请求并将其发送到 AuthenticationMicroservice,以便它可以检查 jwt 令牌是否有效??
或者在我们的网关中拥有一个具有令牌验证功能的 JwtUtils 类是否可以,这样我们就不必为每个请求都去 AuthenticationService 只是为了检查令牌是否有效
我认为我们可以采用 JwtUtils 方法并且仍然不违反单一责任原则
通常如果您使用 JWT 令牌而不是不透明令牌。 JWT 令牌应在资源服务器中进行评估。重要的是,任何依赖 JWT 令牌的系统都必须正确验证它,例如签名和相关声明,如
aud
声明等。
也就是说,除非您重新发明轮子,否则它不应该是身份验证微服务,而是应该生成 ID 令牌的 OpenID Connect 服务器。对于授权,它可以是返回传递授权信息的访问令牌的同一 OpenID Connect 服务器,或者来自 OpenID Connect 服务器的令牌可以在 OAuth2 授权服务器(安全令牌服务)处交换为传递要发送到的授权信息的访问令牌。下游资源服务器。如果资源服务器需要资源所有者身份,这通常在访问令牌的
sub
声明中传达。
有关该主题的好读物是 NIST 特别出版物 800-204 Security Strategies for 基于微服务的应用系统。