当应用程序类型=服务时,如何在夸库斯应用程序中使用@IdToken?



运行这个Quarkus指南时,我可以访问@IdToken:https://quarkus.io/guides/security-openid-connect-web-authentication。它使用"quarkus.oidc.application-type=web-app"。

但是,当我尝试访问其他Quarkus指南(https://quarkus.io/guides/security-openid-connect(中的@IdToken时,我得到以下异常:

io.quarkus.oidc.OIDCException: Current identity is not associated with an ID token

我看到的唯一区别是第二个指南使用"quarkus.oidc.application-type=service",这是默认值。

我试图在授权标头中同时传入访问令牌和 id 令牌,我之前从 Keycloak 检索到它们,但没有运气。

如何让@IdToken按照第二本指南中的工作来保护服务应用程序?

要重现,请以 https://github.com/quarkusio/quarkus-quickstarts/blob/master/security-openid-connect-quickstart/src/main/java/org/acme/security/openid/connect/UsersResource.java 格式复制此代码片段:

@Inject
@IdToken
JsonWebToken idToken;
@GET
@RolesAllowed("user")
@Path("/myname")
public String getUserName() {
return idToken.getName();
}

谢谢!

Quarkus OIDCservice应用程序只能处理HTTP授权标头附带的持有者令牌。 Quarkus OIDCweb-app应用程序正在从授权代码授予响应中提取 ID 和访问令牌。 因此,对于service应用程序,可以直接从访问令牌获取名称。如果访问令牌是不透明/二进制的,则用户名将与令牌内省响应一起返回,并且可以从Principal.getName()访问(从 Quarkus 1.6.0.CR1 开始支持( 呵呵

最新更新