【问题标题】:How to validate request source for a microservice如何验证微服务的请求源
【发布时间】:2019-06-21 07:43:51
【问题描述】:

我有一个基于 Spring 的微服务,它为基于 react.js 的 Web 客户端应用程序和使用 react-native 构建的移动应用程序提供数据。 应用程序托管在云端。

我想允许来自这 2 个客户端应用程序的 REST 调用并阻止任何其他请求源以保护我的应用程序。 我正在考虑使用 APP ID 来传递每个请求,但这不会保护服务,因为任何拥有 APP ID 的人都可以侵入我的 REST 服务。 有人可以建议解决这个问题的最佳方法吗?

【问题讨论】:

  • 您应该尝试通过 csrfToken 来调用您的 API。

标签: java reactjs spring-boot react-native microservices


【解决方案1】:

有多种方法可以保护端点,但最常用的是基于 JWT 令牌的授权

  • 创建端点,例如 /auth/api。
  • 在您的应用登录过程中,从身份验证端点获取基于 JWT 的令牌,例如 auth/signIn。
  • 从身份验证结果中提取令牌。
  • 将 HTTP 标头授权值设置为 Bearer jwt_token。
  • 然后发送访问受保护资源的请求。
  • 如果请求的资源受到保护,Spring Security 将使用我们自定义的 Filter 来验证 JWT 令牌,并构建一个 Authentication 对象并将其设置在 Spring Security 特定的 SecurityContextHolder 中以完成身份验证过程。
  • 如果 JWT 令牌有效,它将向客户端返回请求的资源。

请阅读 Spring JWT 中间件教程

另一种方法是Oauth2,您需要在其中创建 Oauth2 服务器,该服务器充当授权服务器,其中客户端与 clientID 和客户端 Secret 相关联,并且您使用访问令牌批准访问。

【讨论】:

  • 除了来自@vignesh karnika 的回答之外,您还可以在云基础架构级别限制对某些实例(服务)的访问。例如,您可以将您的 api 设为内部,并且只能访问特定安全组中的服务。例如,在 AWS 中,您可以将客户端应用程序添加到特定的安全组,并且只允许实例(具有来自某些 VPC 的特定 IP)访问您的 API。阅读本文了解更多信息:docs.aws.amazon.com/vpc/latest/userguide/…
  • 他说的是 2 个客户端应用程序而不是 2 个客户端。如果只是两个客户端,将获取 ip 并添加到白名单。但他想要公共应用程序(网站和手机),因此无法限制对某些实例的访问,无论他/她的网络 IP 是什么,手机都应该访问服务
猜你喜欢
  • 2019-03-21
  • 2017-06-23
  • 2020-05-14
  • 2018-12-15
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2015-04-19
  • 2012-04-08
相关资源
最近更新 更多