Envoy 的 Jwt 验证失败

2023-12-08

我有一个 Laravel(Lumen) 登录 API,它使用 HS256 生成 JWT。然后我将不记名令牌发送到 Envoy Gateway 并从 Envoy 获取

JWT验证失败

在官方 JWT 解码网站上,我可以成功解码并验证我的不记名令牌。在这里我生成我的 JWT:

{
    $payload = [
        'iss' => config('app.name'),                  // Issuer vom Token
        'sub' => strval($user->ID),                       // Subject vom Token
        'username' => $user->username,
        'iat' => time() - 500,                            // Time when JWT was issued.
        'exp' => time() + config('jwt.ttl'),         // Expiration time
        'alg' => 'HS256',
        'kid' => 'ek4Z9ouLmGnCoezntDXMxUwmjzNTBqptKNkfaqc6Ew8'
    ];
    $secretKey = 'helloworld'; //my base64url

    $jwtEnc = JWT::encode($payload, $secretKey, $payload['alg'], $payload['kid']);

    return $jwtEnc;
}

这是我的 Envoy 配置:

static_resources:
  listeners:
    - name: listener_0
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 10000
      filter_chains:
        - filters:
            - name: envoy.filters.network.http_connection_manager
              typed_config:
                '@type': 'type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager'
                stat_prefix: edge
                http_filters:
                  - name: envoy.filters.http.jwt_authn
                    typed_config:
                      "@type": type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication
                      providers:
                        provider1:
                          issuer: 'Lumen'
                          forward: true
                          local_jwks:
                            inline_string: '{"keys": [{"kty": "oct", "use": "sig", "kid": "ek4Z9ouLmGnCoezntDXMxUwmjzNTBqptKNkfaqc6Ew8", "k": "helloworld", "alg": "HS256"}]}' //'k' is here base64url
                      rules:
                        - match:
                            prefix: "/list"
                          requires:
                            provider_name: "provider1"
                  - name: envoy.filters.http.router
                route_config:
                  virtual_hosts:
                    - name: all_domains
                      domains: [ "*" ]
                      routes:
                        - match:
                            prefix: "/api"
                          route:
                            cluster: loginapi
  clusters:
    - name: loginapi
      connect_timeout: 5s
      load_assignment:
        cluster_name: loginapi
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: 0.0.0.0
                      port_value: 8080



该令牌使用对称算法 (HS256) 进行签名和验证。
对称密钥的关键参数以以下形式提供JSON 网络密钥 in the local_jwksEnvoy 配置中的参数。参数“k”中的键值本身应该以 Base64Url 格式存储:

“k”(密钥值)参数包含对称(或其他单值)密钥的值。它表示为包含键值的八位字节序列的 base64url 编码。

(see RFC7518 第 6.4.1 节)

这里使用 Base64Url 编码是为了能够使用二进制密钥(即每个字节可以具有从 0 到 255 的整个范围内的任何值的密钥)进行签名。

当密钥用于签名和验证时,必须将其解码为其(可能)二进制形式。

为了坚持使用简单的示例键“helloworld”(当然,仅用于说明,而不是真正的键),该键必须存储为"k":"aGVsbG93b3JsZA"(“helloworld”的base64url形式)在配置中的内联jwk中 以未编码形式“helloworld”使用来签署令牌。接收端也使用base64url解码后的k值来验证签名。

Summary:

  • 创建一个二进制密钥并对其进行 base64url 编码
  • 将编码后的密钥存储在“k”参数中local_jwksEnvoy 配置中的参数
  • 解码“k”的值以将其用作验证或签署令牌的密钥
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Envoy 的 Jwt 验证失败 的相关文章

随机推荐

  • 如何从 C++ 调用 fortran 例程?

    我希望从我的 C 代码中调用 fortran 例程 cbesj f 如何实现此目的 以下是我已完成的步骤 从 netlib amos 网页下载 cbesj f 以及依赖项 http www netlib org cgi bin netlib
  • 自动完成建议列表的 z-index 错误,我该如何更改?

    似乎我的自动完成列表的 z index 比我网站的某些元素低 所以它暴露不足 我应该编辑什么类 使用editCSS我播种这些类 并添加 我网站的z索引 但很少有不影响的是1 ui corner all ui menu item ingred
  • 如何打印第三列到最后一列?

    我正在尝试从 DbgView 日志文件中删除前两列 我对其中不感兴趣 我似乎找不到从第 3 列开始打印直到行尾的示例 请注意 每行都有可变数量的列 或更简单的解决方案 cut f 3 INPUTFILE只需添加正确的分隔符 d 即可获得相同
  • JTable 中的列的多个单元格渲染器?

    假设我有以下 JTable 按下按钮后就会显示 Name True Hello World False Foo Bar True Foo False Bar 我想渲染那些单元格最初对于 JCheckBox 来说是正确的 并且所有单元格都是最
  • MonoTouch.Dialog 崩溃

    我有一个小型测试应用程序 它仅在 3 个页面之间循环 这是应用程序委托 public override bool FinishedLaunching UIApplication app NSDictionary options sessio
  • 如何从嵌套函数内部访问 Stimulus JS 控制器方法?

    我有一个 Stimulus 控制器 其中有一个 setSegments 函数 然后在 connect 方法中使用以下代码 connect const options overview container document getElemen
  • 十六进制到二进制转换

    我已通过十六进制转换器将 jpeg 文件转换为十六进制代码 现在如何将该十六进制转换为二进制并另存为Jpeg磁盘上的文件 Like var 声明为十六进制代码 然后将该 var 十六进制代码转换为二进制并保存在磁盘上 Edit Var my
  • 如何使用X509使用JDBC连接MySQL?

    我已经设置了 MySQL 社区服务器 5 1 数据库服务器 我已经设置了 SSL 创建了证书等 我创建了一个具有 REQUIRES X509 属性的用户 我可以使用命令行客户端 mysql 使用此用户进行连接 并且 status 命令显示
  • 请解释一下此电子邮件验证正则表达式:[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我有这个脚本使用正则表达式来检查表单字段是否包含有效的电子邮件地址 请从声明中解释一下
  • Firebase 安全规则 - Auth 生成的 UID 是否应该保密? [复制]

    这个问题在这里已经有答案了 我一直在阅读 Firebase 实时数据库安全规则指南 https firebase google com docs database security 我有点困惑是否应该将 Firebase Auth 生成的
  • 如何将 Tensorflow BatchNormalization 与 GradientTape 结合使用?

    假设我们有一个使用 BatchNormalization 的简单 Keras 模型 model tf keras Sequential tf keras layers InputLayer input shape 1 tf keras la
  • 基于 gnu readline 的节点 shell

    是否有一个在内部使用 gnu readline 的 Node 外壳 As you know node shell sucks in 2 ways among others It doesn t have search for history
  • 是否可以将鼠标光标放在元素后面或者鼠标光标是否有 z 索引?

    当鼠标悬停在某个元素上时 我想用自定义图像替换鼠标光标 我通过首先关闭鼠标光标来做到这一点 cursor none 当它悬停在元素上时 然后我读出悬停元素上的光标位置 并将图形的 css 位置设置为光标位置并稍微偏移 以便鼠标光标不在图形上
  • Keras 如何处理多标签分类?

    我不确定如何解释 Keras 在以下情况下的默认行为 我的 Y 基本事实 是使用 scikit learn 设置的MultilabelBinarizer 因此 举一个随机的例子 我的一排y列是 one hot 编码的 如下所示 0 0 0
  • 显示所有文件的键盘快捷键

    有没有人在解决方案资源管理器中找到 显示所有文件 的键盘快捷键 还有一个相关的问题 是否有任何工具可以显示您在 VS 中执行的任何操作的键盘快捷键 Cheers SteveC 默认情况下没有 但 转到工具 选项 环境 键盘 在 显示包含的命
  • ICommand方法执行参数值

    我尝试理解 wpf 中的 ICommand 在我的 Event 类中 我实现了 ICommand 及其方法 一种方法是执行 public void Execute object parameter Do something 现在是我的问题
  • Office 365 REST API 可以发送包含纯文本和 HTML 正文的电子邮件吗?

    我正在查看 API 文档 看起来您只能指定一个Body in a Message 发送消息 https msdn microsoft com en us office office365 api mail rest operations S
  • 对象实例可以安全地清空指向自身的“this”指针吗?

    Class A public NullIt this NULL Foo NullIt A a new A a gt Foo assert a should assert here 除了内存泄漏之外 有没有办法达到这种效果 您到底想达到什么效
  • 使用接口引用访问 java Object 类方法

    让我们考虑以下示例 public interface SimpleInterface public void simpleMethod public class SimpleClass implements SimpleInterface
  • Envoy 的 Jwt 验证失败

    我有一个 Laravel Lumen 登录 API 它使用 HS256 生成 JWT 然后我将不记名令牌发送到 Envoy Gateway 并从 Envoy 获取 JWT验证失败 在官方 JWT 解码网站上 我可以成功解码并验证我的不记名令