JHipster API网关 The JHipster API Gateway

JHipster可以生成API网关。网关是一个正常的JHipster应用程序,所以您可以使用该项目中通常的JHipster选项和开发工作流程,但它也充当您的微服务器的入口。更具体地说,它为所有微服务提供HTTP路由和负载平衡,服务质量,安全性和API文档。

Summary

  1. HTTP路由 HTTP routing
  2. 安全 Security
  3. 自动文档 Automatic documentation
  4. 速率限制 Rate limiting
  5. 访问控制策略 Access control policy

HTTP使用网关请求路由 HTTP requests routing using the gateway

当启动网关和微服务器时,他们将在注册表中注册 (using the eureka.client.serviceUrl.defaultZone key in the src/main/resources/config/application.yml file).

网关将使用其应用程序名称自动代理对微服务的所有请求: for example, when microservices app1 is registered, it is available on the gateway on the /app1 URL.

例如,如果您的网关正在运行 localhost:8080, 你可以通过http://localhost:8080/app1/rest/foos 获得app1微服务提供的foos的资源。 如果您尝试使用Web浏览器执行此操作,请勿忘记在JHipster中默认情况下保护REST资源,因此您需要发送正确的JWT标题(请参阅下面的安全性), 或删除这些安全性微服务器MicroserviceSecurityConfiguration 类中的URL 。

如果有几个相同服务的实例运行,则网关将从JHipster注册表中获得这些实例,并将:

每个网关都有一个特定的“管理>网关”菜单,可以监视打开的HTTP路由和微服务实例。

安全 Security

JWT(JSON Web令牌) JWT (JSON Web Token)

JWT(JSON Web Token)是用于在微服务架构中保护应用程序的行业标准,易于使用的方法。

JHipster使用Okta提供的 JJWT library来实现JWT。

Tokens 由网关生成,并发送到基础的微服务器,因为它们共享一个公用密钥,微服务器能够验证令牌,并使用该令牌对用户进行身份验证。

这些令牌是自给自足的:它们具有认证和授权信息,因此微服务器不需要查询数据库或外部系统。这对于确保可扩展架构非常重要。

为了安全起见,JWT秘密令牌必须在所有应用程序之间共享。

  • 对于每个应用程序,默认令牌是唯一的,并由JHipster生成。它存储在 .yo-rc.json 文件中.
  • Tokens are configured with the jhipster.security.authentication.jwt.secret key in the src/main/resources/config/application.yml file.
  • 要在所有应用程序之间共享此密钥,请将密钥从您的网关复制到所有微服务器, 或使用JHipster Registry的Spring Config Server进行共享。
  • 一个好的做法是在开发和生产中有不同的关键。

OAuth2

此功能目前在BETA中,因此其文档尚未完成。

JHipster提供了基于Spring Security生成“UAA”(用户帐户和身份验证)服务器的选项。该服务器提供用于保护网关的OAuth2令牌。

You will find all UAA-related information on our specific Using UAA for Microservice Security documentation page.

然后,网关使用Spring Security的JWT实现将JWT令牌发送到微服务器。

自动文档 Automatic documentation

网关公开了它所代理的服务的Swagger API定义,以便您可以从Swagger UI和swagger-codegen等所有有用工具中受益。

网关的“admin> API”菜单有一个特定的下拉列表,显示了网关的API和注册的微服务器中的所有API。

使用此下拉列表,所有微服务API都将自动记录,并从网关进行测试。

使用安全API时,安全令牌将自动添加到Swagger UI界面中,因此所有请求都可以开箱即用。

速率限制 Rate limiting

这是一个使用 Bucket4jHazelcast 提供微服务服务质量的高级功能。

网关提供速率限制功能,因此可以限制REST请求的数量:

  • 通过IP地址(匿名用户)
  • 通过IP地址(匿名用户)

然后,JHipster将使用 Bucket4jHazelcast 来计算请求计数,并在超出限制时发送HTTP 429(请求太多)错误。每个用户的默认限制是每小时100,000个API调用。

这是一个重要的功能,以保护微服务架构免受特定用户请求的淹没。

当网关保护REST端点时,它可以完全访问用户的安全信息,因此可以根据用户的安全角色轻松扩展以提供特定的速率限制。

要启用速率限制,请打开 application-dev.ymlapplication-prod.yml 文件,然后设置 enabledtrue:

jhipster:
    gateway:
        rate-limiting:
            enabled: true

数据存储在Hazelcast中,只要配置了Hazelcast分布式缓存,就可以扩展网关,这应该是开箱即用的:

  • 默认情况下,所有网关都配置了Hazelcast
  • 如果您使用 JHipster Registry, 则网关的所有实例都应自动将其自身注册到分布式缓存中

如果要添加更多规则或修改现有规则,则需要在RateLimitingFilter类中编写它们。修改的例子可以是:

  • Lowering the limit of HTTP calls
  • Adding limits per minute or per day
  • Removing all limits for "admin" users

访问控制策略 Access control policy

By default all registered microservices are available through the gateway. If you want to exclude a specific API from being exposed through the gateway, you can use the gateway's specific access control policy filter. It is configurable using the jhipster.gateway.authorized-microservices-endpoints key in the application-*.yml files:

jhipster:
    gateway:
        authorized-microservices-endpoints: # Access Control Policy, if left empty for a route, all endpoints will be accessible
            app1: /api,/v2/api-docs # recommended dev configuration

For example, if you only want the /api/foo endpoint of microservice bar to be available:

jhipster:
    gateway:
        authorized-microservices-endpoints:
            bar: /api/foo

results matching ""

    No results matching ""