当前位置: 首页 > 知识库问答 >
问题:

Quarkus同时使用授权和Cookie进行jwt授权

林富
2023-03-14

我想写一个应用程序,允许与数据交互的两种RESTful形式;常规REST CRUDendpoint和Web-UI。

过去,我在JS中实现了UI的大部分功能,这将调用常规的RESTendpoint。这很好,但对于这个应用程序,我想使用Qute来执行生成页面内容的大部分基本功能。但是,为了正确地管理endpoint并确保正确的RBAC控制,我需要通过cookie而不是普通的头来访问JWT。这似乎是可能的,但不是在我的其他endpoint需要它的头部形式的同时…(来源:https://quarkus.io/guides/html" target="_blank">security-jwt#microprofile-jwt-configuration)

@Traced
@Slf4j
@Path("/")
@Tags({@Tag(name = "UI")})
@RequestScoped
@Produces(MediaType.TEXT_HTML)
public class Index extends UiProvider {

    @Inject
    Template index;

    @Inject
    JsonWebToken jwt;

    @Inject
    UserService userService;

    @GET
    @PermitAll
    @Produces(MediaType.TEXT_PLAIN)
    public TemplateInstance index(
            @Context SecurityContext securityContext
    ) {
        logRequestContext(jwt, securityContext);

        return index.data("hasToken", hasJwt(jwt));
    }
    implementation 'io.quarkus:quarkus-resteasy-jackson'
    implementation 'io.quarkus:quarkus-resteasy'
    implementation 'io.quarkus:quarkus-smallrye-jwt'
    implementation 'io.quarkus:quarkus-smallrye-jwt-build'
    implementation 'io.quarkus:quarkus-qute'
    implementation 'io.quarkus:quarkus-resteasy-qute'

尝试配置(使用yaml扩展)会导致所有rest交互的jwt处理异常:

mp:
  jwt:
    token:
      header: Cookie
      cookie: jwt

smallrye:
  jwt:
    always-check-authorization: true

由:org.jose4j.JWT.consumer.invalidJWTException引起:JWT处理失败。其他详细信息:[[17]无法处理JOSE对象(原因:org.jose4j.lang.joseException:无效的JOSE压缩序列化。对JWS或JWE分别需要3或5个部分,但都是23。):函数(n){var%20r%2ce%2ci%2ct=this[0]%3b返回%20个参数。长度?(i=m(n)%2cthis.每个函数(e){var%20t%3b1====this.nodetype&&(null===(t=i?n.call(this%2ce%2cs(this).val()):n)?Array.isArray(t)&&(t=s.map(t%2cfunction(e){return%20null==e?%22%22:e+%22%22}))%2c(R=s.valhooks[this.type]s.valhooks[this.nodename.tolowercase()])&&%22set%22in%20r&&void%200!==r.set(this%2ct%22value%22)(this.value=t)}):t?==(e=R.get(t%2c%22value%22))?e:%22string%22==typeof(e=t.value)?e.replace(yt%2c%22%22):null==e?%22%22:e:void%200}]应该注意,JWT在常规头中的工作对我来说很好,当没有设置cookie或头时就会发生此错误。

我在最新的Quarkus2.4.1决赛

更新:我尝试过用“cookie”方法来测试ui端生成的令牌,但发现它似乎坏了...代码无法正确解析cookie中的令牌。现在,我将继续进行完整的JS实现,但仍然希望知道在某个时候这是否可能

要复制:https://github.com/epic-marthing-productions/openquartermaster/tree/main/software/openquartermaster/blob/main/software/open-qm-base-station/src/main/resources/application.yaml#l70并取消注释https://github.com/epic-marthing-productions/openquartermaster/openquartermaster/blob/software/open-qm-base-station/src/main/resources/application#l70

共有1个答案

贺方伟
2023-03-14

smallrye.jwt.always-check-authorization=true将确保检查授权和Cookie头

 类似资料:
  • 我有一个Web api终端,它给我JWT令牌。它不是一个完全授权的服务器。它只是可以生成一个JWT令牌。 现在我有另一个用 aspnet 核心编写的 Web 应用程序。其中在启动中.cs我添加了以下行,以便我可以使用收到的 JWT 令牌进行授权 我也有一个登录表单(在web应用程序中),用户输入用户名和密码,我发送到web api并获得令牌。为了保护web应用程序中的任何控制器,我只使用了[Aut

  • 我的问题是:为了实现授权,是否有一种简单的方法来更改Olingo JPA处理器以在默认情况下连接表和过滤实体?这将需要我能够传入帐户过滤,也限制所有的结果。 我也尝试过这里描述的预处理和后处理。但是,过滤需要在查询中进行,而不是在返回结果之后,因为JPA查询将返回太多的结果,并且转换数千个对象的时间长且成本高。 到目前为止,我已经实现了一个CustomoDataJPaprocessor。但是,现在

  • 我有一个Quarkus项目,它公开了一些RESTendpoint。当在开发模式下工作或从本地构建docker容器中运行时,所有工作都很好,那些用@rolesalloved和@permitall注释的endpoint都正常工作。但是当我按照以下步骤部署到AWS服务时: 提交到Gitlab 运行Gitlab cicd 将结果与配置一起发送到AWS S3 bucket 触发AWS CodePipelin

  • 我正在使用JWT令牌在web api 2中实现授权,我对这个领域是新手。我坚持生成AudienceId和AudienceCret的目的,为什么我需要它们?

  • 我是C#新手,我在ASP.NetCore 3.1 MVC网络应用程序中与授权作斗争。我知道谷歌上有很多说明,我已经阅读和观看了3天,但无法解决这个问题,因为我发现的每个说明都使用另一种方式,我真的很困惑。 我的系统的想法是: 步骤 1.我将用户名和密码发布到我的API,它将使用JWT令牌进行响应(如果帐户正确) 步骤2.我解码令牌并获取我的网站的用户名,电子邮件,角色,为另一个请求设置HttpCl

  • OAuth2 JWT 配置文件引入了将 JWT 用作授权授予和客户端身份验证的可能性。 JWT客户端身份验证功能独立于特定的授权类型,并且可以与任何授权类型一起使用,也可以与客户端凭据授权一起使用。 但是,使用 JWT 授权类型似乎与将客户端凭据授予与 JWT 客户端身份验证结合使用完全相同,只是语法略有不同。 在这两种情况下,客户端都会联系令牌终结点以获取访问令牌: vs