我正在尝试使用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"
我认为:
不是吗?
答案 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