Spring jhipster monolith到微服务迁移:没有转发授权信息?

Spring jhipster monolith到微服务迁移:没有转发授权信息?,spring,keycloak,jhipster,openid-connect,spring-security-oauth2,Spring,Keycloak,Jhipster,Openid Connect,Spring Security Oauth2,我开始将我的jhipster monolith迁移到微服务中:最初是网关/ui/后端。但是现在我已经卡住了-身份验证信息似乎没有转发到微服务。或者说我不知道系统的哪个部分负责?对服务/api的调用会导致后端的HTTP 401响应 这些应用程序是通过jhipster创建的,非常简单,还没有重大更改。通过提供的docker compose启动KeyClope服务 因此,用户界面通过KeyClope登录。接收一个JSESSIONID?我确实看到网关在这一点上进行了OAuth2令牌交换,因此我认为他应该

我开始将我的jhipster monolith迁移到微服务中:最初是网关/ui/后端。但是现在我已经卡住了-身份验证信息似乎没有转发到微服务。或者说我不知道系统的哪个部分负责?
服务/api
的调用会导致后端的HTTP 401响应

这些应用程序是通过jhipster创建的,非常简单,还没有重大更改。通过提供的docker compose启动KeyClope服务

因此,用户界面通过KeyClope登录。接收一个
JSESSIONID
?我确实看到网关在这一点上进行了OAuth2令牌交换,因此我认为他应该在下游调用上附加该令牌?调用
/services/api
网关接收:

GET'/services/api/projects?page=0&size=3&loadArchived=false&loadAll=false&sort=startTime,asc&sort=id'的请求已收到:
HttpServletRequestImpl[GET/services/api/projects]
servletPath:/services/api/projects
路径信息:空
标题:
秒取数模式:cors
推荐人:http://localhost:9000/
sec获取站点:相同来源
接受语言:en-US,en;q=0.5
cookie:io=u8LimsrLeezi1Wndaaag;XSRF-TOKEN=0ee385f0-7035-455c-a62f-53e4fb920af3;JSESSIONID=-MJuDH_RKSEBKWa3fEudYqX1fQII_8FMdqec2gc1
主机:localhost:9000
连接:关闭
dnt:1
接受编码:gzip,deflate
接受:application/json、text/plain、*/*
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:88.0)Gecko/20100101 Firefox/88.0
sec fetch dest:空
安全过滤链:[
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
头部过滤器
克斯菲尔特
CsrfFilter
注销过滤器
OAuth2AuthorizationRequestRedirectFilter
OAuth2AuthorizationRequestRedirectFilter
OAuth2LoginAuthenticationFilter
BealerTokenAuthenticationFilter
请求缓存过滤器
SecurityContextHolderAwareRequestFilter
匿名身份验证过滤器
OAuth2AuthorizationCodeGrantFilter
会话管理筛选器
例外TranslationFilter
过滤器安全接收器
]
鉴于微服务(
api
)没有任何敏感信息可用。或者我可能看不到?我记得一些关于spring security隐藏身份验证头的事情

Request received for GET '/api/projects?page=0&size=3&loadArchived=true&loadAll=true&sort=startTime,asc&sort=id':

HttpServletRequestImpl [ GET /api/projects ]

servletPath:/api/projects
pathInfo:null
headers: 
sec-fetch-mode: cors
referer: http://localhost:9000/?showArchived=true&showAll=true
sec-fetch-site: same-origin
accept-language: en-US,en;q=0.5
x-forwarded-proto: http
Connection: Keep-Alive
x-forwarded-port: 9000
Host: localhost:8081
dnt: 1
x-forwarded-for: 127.0.0.1
accept: application/json, text/plain, */*
x-forwarded-host: localhost:9000
x-forwarded-prefix: /services
accept-encoding: gzip, deflate
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
sec-fetch-dest: empty


Security filter chain: [
  WebAsyncManagerIntegrationFilter
  SecurityContextPersistenceFilter
  HeaderWriterFilter
  LogoutFilter
  OAuth2AuthorizationRequestRedirectFilter
  BearerTokenAuthenticationFilter
  RequestCacheAwareFilter
  SecurityContextHolderAwareRequestFilter
  AnonymousAuthenticationFilter
  OAuth2AuthorizationCodeGrantFilter
  SessionManagementFilter
  ExceptionTranslationFilter
  FilterSecurityInterceptor
]
(可能)重要提示:我不使用Eureka。我现在“硬编码”了路由(
application-dev.yml
in
gateway
)。这会改变你的行为吗

zuul:
路线:
应用程序编程接口:
路径:/**
网址:http://localhost:8081/

如果有人想检查以下内容,则该代码可供公众使用:。如果您需要更多信息,请告诉我。

我认为@GaëlMarziou的评论为我指明了正确的方向:非常感谢! 因此,我以前使用JHipster Generator 6.x.x生成了网关,并更新为7.something(最新版本稳定到今天)。重新生成网关,现在可以像符咒一样工作了。他完美地将授权头信息附加到下游请求上

简要回答您的问题:

不包括用于生成应用程序的选项(.yo-rc.json或JDL)

好吧,我认为JHipster是一个很好的开始方式——但不是保持你的项目。因此,我喜欢用它来启动我的项目,但随后就放弃了它。但是,我当然同意,在这种情况下,追踪与JHipster相关的问题会有所帮助

您的体系结构没有服务发现是令人惊讶的,不确定您的目标是什么


我认为k8s还可以完美地处理静态路由上的发现和负载平衡。这可能是一个偏好的问题,但如果我不一定需要,我不喜欢再跟踪一台服务器;)

您的git repo不包括用于生成应用程序的选项(.yo-rc.json或JDL),也没有jhipster版本,因此很难说是什么问题,但可以肯定的是,您的网关缺少几个关键类,如AuthorizationHeaderFilter、AccessControlFilter或SwaggerBasePathRewritingFilter。您没有服务发现的架构令人惊讶,不确定您的目标是什么。@GaëlMarziou非常感谢您的评论。它为我指明了正确的方向。回答了我自己的问题,也回答了你关于我的项目设置的问题。见下文。祝你有美好的一天!我采用与您相同的方法使用JHipster启动项目,但我始终提交.yo-rc.json或JDL文件,因为1或2年后我(或我的继任者)更新某些库/框架可能会有困难,在这种情况下,我会在一个空文件夹中重新生成JHipster的最新版本,以了解JHipster团队是如何解决此更新的。它只对你期望/希望长寿成功的项目才有意义:)