Rest 在Quarkus中并行使用两个OIDC身份验证流

Rest 在Quarkus中并行使用两个OIDC身份验证流,rest,single-page-application,openid-connect,quarkus,Rest,Single Page Application,Openid Connect,Quarkus,我使用Quarkus创建了一个Rest API和一个前端作为一个自包含系统。 前端是静态服务的 对于身份验证,我使用kleycloak服务器,其配置与quarkus指南中的配置几乎相同 quarkus.oidc.auth-server-url=http://localhost:8180/auth/realms/quarkus quarkus.oidc.client-id=frontend quarkus.oidc.application-type=web-app quarkus.http.aut

我使用Quarkus创建了一个Rest API和一个前端作为一个自包含系统。 前端是静态服务的

对于身份验证,我使用kleycloak服务器,其配置与quarkus指南中的配置几乎相同

quarkus.oidc.auth-server-url=http://localhost:8180/auth/realms/quarkus
quarkus.oidc.client-id=frontend
quarkus.oidc.application-type=web-app
quarkus.http.auth.permission.authenticated.paths=/*
quarkus.http.auth.permission.authenticated.policy=authenticated
使用此配置,我需要对RESTAPI和前端进行身份验证。这就是我想要的。 如果我尝试加载index.html,我会被重定向到keydape并返回。那很好用

问题是,RESTAPI也会发生同样的情况。我被重定向到Keyclope,上面有302的状态码。在这里,我希望使用承载令牌进行身份验证,而无需重定向。Quarkus对此具有以下配置:

quarkus.oidc.application-type=service

这与前端的配置冲突。有没有一种方法可以同时使用这两种设置,一种用于静态文件,另一种用于rest api?

如果我没记错的话,您正在寻找一种多租户oidc设置,即使您没有设计租户。可以找到指南和示例。 这样,您将有类似的设置:

quarkus.oidc.auth-server-url=http://localhost:8180/auth/realms/quarkus
quarkus.oidc.client-id=frontend
quarkus.oidc.application-type=web-app
quarkus.http.auth.permission.authenticated.paths=/*
quarkus.http.auth.permission.authenticated.policy=authenticated

quarkus.oidc.restapi.auth-server-url=http://localhost:8180/auth/your/path
quarkus.oidc.restapi.client-id=backend
quarkus.oidc.restapi.application-type=service

另外,你可以用更可爱的名字来代替restapi。

hm。。但是这样我需要一个定制的tenantResolver,它检查调用是转到RESTAPI还是静态文件。然后我需要一个自己的restapi名称空间,否则我必须检查当前文件的结尾。我认为一个自包含的系统更像是一个典型的用例,不需要像这样的解决方法。@Alex好的,我看到了这个问题,我只是很遗憾地熟悉这个解决方案。如果您的项目是新项目,则可以为控制器添加/api/path前缀,以区分静态内容和api。