EnvoyFilter jwt_authn

时间:2020-11-09 08:21:02

标签: lua jwt istio envoyproxy

我正在尝试使用EnvoyFilter从请求中传递jwt有效负载,对其进行解码,然后将声明用作请求的标头。

它不起作用,使用jwt_authn后,我无法使满载有效内容的dynamicMetadata保持不变。

这是我使用的jwt_authn过滤器的示例:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: jwt-filter
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      app: app1
  configPatches:
    - applyTo: HTTP_FILTER
      match:
        context: SIDECAR_INBOUND
        listener:
          portNumber: 3000
          filterChain:
            filter:
              name: "envoy.http_connection_manager"
              subFilter:
                name: "envoy.router"
      patch:
        operation: INSERT_BEFORE
        value:
          name: envoy.filters.http.jwt_authn
          typed_config:
            "@type": "type.googleapis.com/envoy.config.filter.http.jwt_authn.v2alpha.JwtProvider"
            providers:
              authority_jwks:
                issuer: "testing@secure.istio.io"
                remote_jwks:
                  http_uri:
                    uri: "https://raw.githubusercontent.com/istio/istio/master/security/tools/jwt/samples/jwks.json"
                    timeout: 5s
                  cache_duration: 3600s
                forward: true
                payload_in_metadata: "jwt-metadata"
                forward_payload_header: "jwt-header"

我认为:

  • 第一步,如果我的应用正在打印请求标头,则jwt-header应该是标头之一,并包括加密的jwt。
  • 如果我正在使用获取DynamicMetadata的特使lua过滤器,它将包含jwt-metadata字段。

不是吗?

2 个答案:

答案 0 :(得分:0)

JWT过滤器默认从“ Authorization:Bearer”头中提取JWT令牌。您知道Envoy是否可以阅读吗?

在以跟踪级别的日志记录运行时,您还可以检查特使日志。它打印出jwt_authn日志,显示过滤器正在做什么。

答案 1 :(得分:-1)

我能够解决它。

当使用requetsAuthentication时,默认情况下默认使用jwt_authn,我不需要在EnvoyFilter上专门定义它。

我所做的是添加lua脚本的EnvoyFilter,该脚本获取如下所示的已解密的JWT令牌:

metadata = request_handle:streamInfo():dynamicMetadata():get("envoy.filters.http.jwt_authn") claims=metadata["testing@secure.istio.io"]

10x