Копіювання JWT-заявок до заголовків HTTP
Це завдання показує, як скопіювати дійсні заявки JWT до HTTP заголовків після успішного завершення автентифікації JWT за допомогою політики автентифікації запитів Istio.
Перед початком
Перед початком цього завдання виконайте наступні кроки:
Ознайомтеся з автентифікацією кінцевого користувача Istio.
Встановіть Istio за допомогою посібника з установки Istio.
Розгорніть навантаження
httpbinтаcurlв просторі іменfooз увімкненою інʼєкцією sidecar. Розгорніть приклад простору імен і навантаження за допомогою цих команд:$ kubectl create ns foo $ kubectl label namespace foo istio-injection=enabled $ kubectl apply -f @samples/httpbin/httpbin.yaml@ -n foo $ kubectl apply -f @samples/curl/curl.yaml@ -n fooПереконайтеся, що
curlуспішно взаємодіє зhttpbinза допомогою цієї команди:$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c curl -n foo -- curl http://httpbin.foo:8000/ip -sS -o /dev/null -w "%{http_code}\n" 200
Дозволити запити з дійсним JWT і заявками типу список
Наступна команда створює політику автентифікації запитів
jwt-exampleдля навантаженняhttpbinв просторі іменfoo. Ця політика приймає JWT, виданийtesting@secure.istio.io, і копіює значення заявкиfooв HTTP заголовокX-Jwt-Claim-Foo:$ kubectl apply -f - <<EOF apiVersion: security.istio.io/v1 kind: RequestAuthentication metadata: name: "jwt-example" namespace: foo spec: selector: matchLabels: app: httpbin jwtRules: - issuer: "testing@secure.istio.io" jwksUri: "https://raw.githubusercontent.com/istio/istio/release-1.28/security/tools/jwt/samples/jwks.json" outputClaimToHeaders: - header: "x-jwt-claim-foo" claim: "foo" EOFПереконайтеся, що запит з недійсним JWT відхилено:
$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c curl -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer invalidToken" -w "%{http_code}\n" 401Отримайте JWT, який видано
testing@secure.istio.ioі має заявку з ключемfoo.$ TOKEN=$(curl https://raw.githubusercontent.com/istio/istio/release-1.28/security/tools/jwt/samples/demo.jwt -s) && echo "$TOKEN" | cut -d '.' -f2 - | base64 --decode - {"exp":4685989700,"foo":"bar","iat":1532389700,"iss":"testing@secure.istio.io","sub":"testing@secure.istio.io"}Переконайтеся, що запит з дійсним JWT дозволено:
$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c curl -n foo -- curl "http://httpbin.foo:8000/headers" -sS -o /dev/null -H "Authorization: Bearer $TOKEN" -w "%{http_code}\n" 200Переконайтеся, що запит містить дійсний HTTP-заголовок зі значенням заявки JWT:
$ kubectl exec "$(kubectl get pod -l app=curl -n foo -o jsonpath={.items..metadata.name})" -c curl -n foo -- curl "http://httpbin.foo:8000/headers" -sS -H "Authorization: Bearer $TOKEN" | jq '.headers["X-Jwt-Claim-Foo"][0]' "bar"
Очищення
Видаліть простір імен foo:
$ kubectl delete namespace foo