Копіювання 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.24/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.24/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