You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeneXus下使用指定公钥验证JWT Bearer Token的实现方案问询

Genexus JWT校验功能实现方案

需求说明:根据环境提供的公钥验证请求头中携带的"Bearer Token",同时校验用户可用的scope权限。

实现步骤

  • 核心说明:DoVerify方法的公钥通过第四个参数&JWTOptions的属性传入,不需要额外修改参数位置

步骤1:提前获取JWKS公钥

你需要先从指定的JWKS地址拉取公钥集合,解析JWT头部的kid字段匹配到对应公钥,转换为PEM格式的公钥字符串存储。建议对公钥做定时缓存,不要每次接口请求都重复拉取公钥。

步骤2:修正校验代码

&token = &HttpRequest.GetHeader('Authorization')
if not &token.IsEmpty() 
    &token = &token.Replace("Bearer ", "")  
    // 配置JWTOptions传入公钥
    &JWTOptions.SigningKey = &你获取到的PEM格式公钥变量
    // 可按需开启内置校验:过期时间、签发人校验等
    &JWTOptions.ValidateExpiration = True
    &JWTOptions.ValidateIssuer = True
    
    &result = &JWTCreator.DoVerify(&token, JWTAlgorithm.RS256, &privateClaims, &JWTOptions) 
    if &result              
        // Scope权限校验逻辑
        &userScopes = &privateClaims.Get("scope")
        // 假设接口需要的权限为"api:read",可根据实际需求调整校验规则
        if &userScopes.Contains("api:read")
            &mensagem = 'token is valid'
        else
            &codigo = 403
            &mensagem = "Insufficient permissions"
        endif
    else
        &mensagem = "token is NOT valid"
        If &JWTCreator.HasError()
            &codigo = &JWTCreator.GetErrorCode().ToNumeric()
            &mensagem = &JWTCreator.GetErrorDescription()
        EndIf   
    endif
else
   &codigo = 401
   &mensagem = "Token not found!"
endif

注意事项

  • 如果公钥解析失败,可检查是否正确去掉了JWKS返回的公钥头尾、换行符是否符合PEM格式要求
  • Scope字段如果是空格分隔的字符串,可先按空格拆分再做权限匹配
  • 生产环境建议将JWKS地址、允许的签发人、需要校验的Scope配置为环境变量,不要硬编码在代码里

内容的提问来源于stack exchange,提问作者Anderson Porcari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:45:03