Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Autenticação de requisição JWT para um gateway de entrada

Última atualização: Sep 12, 2026

Este tópico mostra como configurar a autenticação de requisição JWT no Service Mesh para validar a origem, também conhecida como autenticação de usuário final. Ao receber uma requisição do usuário, essa configuração verifica se o token de acesso no cabeçalho da requisição é confiável e autoriza requisições de origens legítimas. Este tópico descreve como configurar a autenticação de requisição JWT para um gateway de entrada no ASM, exigindo um token de acesso confiável para acessar o service.

Pré-requisitos

Contexto

Este tópico utiliza o service httpbin como exemplo. Primeiro, use uma política RequestAuthentication para restringir as requisições que acessam o service por meio de um gateway de entrada. Essa política inicial permite requisições com um JWT válido e nega requisições com um JWT inválido, mas também permite requisições sem JWT. Com base nisso, use uma política de autorização para restringir ainda mais as requisições nos dois cenários a seguir:

  • Use uma política de autorização para exigir que todas as requisições contenham um JWT para acessar o service com sucesso pelo gateway de entrada.

  • Use uma política de autorização para exigir que todas as requisições contenham um JWT de um emissor específico para acessar o service com sucesso pelo gateway de entrada.

Etapa 1: Implantar o service de exemplo

  1. Ative a injeção automática para o namespace padrão.

    1. Faça login no console do ASM.

    2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    3. Na página de detalhes da instância ASM, escolha ASM Instance > Global Namespace no painel de navegação à esquerda.

    4. Na página Global Namespace, localize default e clique em Enable Automatic Sidecar Proxy Injection na coluna Automatic Sidecar Injection.

    5. Na caixa de diálogo Confirm, clique em OK.

  2. Implante o service de exemplo.

    1. Connect to the cluster by using kubectl and the cluster's KubeConfig file.

    2. Crie um arquivo chamado httpbin.yaml com o seguinte conteúdo.

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: httpbin
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: httpbin
        labels:
          app: httpbin
          service: httpbin
      spec:
        ports:
        - name: http
          port: 8000
          targetPort: 80
        selector:
          app: httpbin
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: httpbin
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: httpbin
            version: v1
        template:
          metadata:
            labels:
              app: httpbin
              version: v1
          spec:
            serviceAccountName: httpbin
            containers:
            - image: docker.io/kennethreitz/httpbin
              imagePullPolicy: IfNotPresent
              name: httpbin
              ports:
              - containerPort: 80
    3. Execute o comando a seguir para criar a aplicação httpbin.

      kubectl apply -f httpbin.yaml -n default

Etapa 2: Criar um Gateway e um service virtual

  1. Crie um Gateway.

    1. Faça login no console do ASM. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    2. Na página Mesh Management, clique no nome da instância ASM. No painel de navegação à esquerda, escolha ASM Gateways > Gateway. Na página exibida, clique em Create from YAML.

    3. Defina Namespaces como default, insira o conteúdo a seguir na caixa de texto e clique em Create.

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: httpbin-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
  2. Crie um service virtual.

    1. Na página de detalhes da instância ASM, escolha Traffic Management Center > VirtualService no painel de navegação à esquerda. Na página exibida, clique em Create from YAML.

    2. Defina Namespaces como default, insira o conteúdo a seguir na caixa de texto e clique em Create.

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: httpbin
        namespace: default
      spec:
        gateways:
          - httpbin-gateway
        hosts:
          - '*'
        http:
          - route:
              - destination:
                  host: httpbin
                  port:
                    number: 8000

Etapa 3: Criar uma política RequestAuthentication

  1. Crie um JWK.

    1. No OpenSSL, execute o comando a seguir para gerar uma chave privada RSA de 2048 bits.

      openssl genrsa -out rsa-private-key.pem 2048
    2. Execute o comando a seguir para gerar uma chave pública a partir da chave privada.

      openssl rsa -in rsa-private-key.pem -pubout -out rsa-public-key.pem
    3. Em uma ferramenta online de Conversor de JWK para PEM, selecione PEM-to-JWK (RSA Only), insira a chave pública e clique em envie para converter a chave pública em um JWK.

      {"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add7863915c","n":"2dnwOlDKEwII9Cyh9w7o59a5y3RS2gWUKYC3HSBJL1FhYIZa7sjTCKxwEuG-vCRQkR6augWxYWseSDfgtyivzi3CxxkF8WnQbECOCGm5xAYKmMcXeOpv0zsJTHN122Tt_tsd6K2OC3yGwKtmp7m-MOpHagqWRqFtvyEOm_1JW1-t0n1VsGSeWww8dvcmnJPKAKHbAU40jdV1hMn9AA3RfSpDY6nfrUkpXA5-aQ6rJRjMn36DatZ5ykVL4LKPOUxZdfK_yNIPkCnwIKesqiOpr4s-iCM8pMiZuejDZ1qoX-uBjggESf4G9_L-laDSeoDmXeOZ9kzN3Jw8ay69ihIFEQ"}
  2. Crie uma política RequestAuthentication.

    1. Faça login no console do ASM.

    2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

    3. Na página Mesh Management, localize a instância ASM que deseja configurar. Clique no nome da instância ASM ou clique em Manage na coluna Actions.

    4. No painel de navegação à esquerda da página de detalhes da instância ASM, escolha Mesh Security Center > RequestAuthentication. Na página exibida, clique em Create.

    5. Na página Create, configure os parâmetros e clique em Create.

      Parâmetro

      Descrição

      Namespaces

      Defina Namespaces como istio-system.

      Name

      Insira um nome para a política.

      Match Label

      Seleciona as cargas de trabalho às quais a política se aplica.

      Clique em Add Matching Label. Defina Name como istio e Value como ingressgateway.

      JWT Rule Set

      Clique em Add à direita de JWT Rule Set e configure a regra JWT:

      • issuer: O emissor do JWT. Neste tópico, defina como testing@asm.test.io.

      • audiences: Uma lista de públicos-alvo para o JWT. Especifica quais services podem usar o JWT. Deixe em branco para permitir o acesso a todos os services.

      • jwks: As informações do JWT. Defina como {"keys":[YOUR_JWK]}. Por exemplo, se o JWK da Etapa 3 for {"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add786**"}, defina jwks como {"keys":[{"kty":"RSA","e":"AQAB","kid":"59399e22-7a9a-45ed-8c76-7add786**"}]}.

Etapa 4: Verificar a política RequestAuthentication

  1. Use uma ferramenta como o JWT.io para codificar suas informações de requisição JWT em um JWT.

    Na seção Decoded, insira as informações da requisição JWT. A ferramenta as converte automaticamente em um JWT na seção Encoded.

    • HEADER: Defina o algoritmo de criptografia como RS256, insira o kid do seu JWK e defina o tipo como JWT.

    • PAYLOAD: Defina iss como testing@asm.test.io. Você também pode adicionar informações personalizadas.

    • VERIFY SIGNATURE: Insira a chave pública e a chave privada criadas na Etapa 3.

    Neste exemplo, o valor kid no HEADER é 59399e22-7a9a-45ed-8c76-7add7863915c. O PAYLOAD também contém uma claim sub com o valor testing@asm.test.io, uma claim iat com o valor 1623389700 e uma claim personalizada foo com o valor bar.

  2. Acesse o service pelo gateway de entrada.

    1. Execute o comando a seguir para enviar uma requisição com o JWT válido criado na etapa anterior.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT
    2. Execute o comando a seguir para enviar uma requisição com um JWT inválido.

      curl -I  -H "Authorization: Bearer invalidToken" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy
    3. Execute o comando a seguir para enviar uma requisição sem JWT.

      curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

    Os resultados confirmam que a política RequestAuthentication funciona: requisições com um token válido ou sem token são bem-sucedidas, enquanto requisições com um token inválido são negadas.

Etapa 5: Criar uma política de autorização

**Cenário 1: Restringir o acesso ao service**

Crie uma política de autorização para exigir que todas as requisições contenham um JWT para acessar o service pelo gateway de entrada.

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância ASM que deseja configurar. Clique no nome da instância ASM ou clique em Manage na coluna Actions.

  4. Na página de detalhes da instância ASM, escolha Mesh Security Center > AuthorizationPolicy no painel de navegação à esquerda. Na página exibida, clique em Create.

  5. Na página Create, configure os parâmetros e clique em Create.

    Neste exemplo, insira require-jwt em Name.

    Parâmetro

    Descrição

    Name

    Insira um nome para a política de autorização.

    Policy Type

    Defina Policy Type como ALLOW.

    Gateway Scope

    Clique na aba Gateway Scope e defina ASM Gateway como ingressgateway. Na seção Add Request Source, ative RequestPrincipals e insira * na caixa de texto.

  6. Verifique a política de autorização.

    1. Execute o comando a seguir para enviar uma requisição sem JWT.

      curl -I http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy
    2. Execute o comando a seguir para enviar uma requisição com um JWT válido.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

    Os resultados confirmam que a política de autorização funciona: requisições sem JWT agora são negadas, enquanto requisições com um token válido são bem-sucedidas.

**Cenário 2: Restringir emissores de JWT**

Crie uma política de autorização para exigir que as requisições contenham um JWT de um emissor específico para acessar o service pelo gateway de entrada.

  1. Faça login no console do ASM.

  2. No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.

  3. Na página Mesh Management, localize a instância ASM que deseja configurar. Clique no nome da instância ASM ou clique em Manage na coluna Actions.

  4. Na página de detalhes da instância ASM, escolha Mesh Security Center > AuthorizationPolicy no painel de navegação à esquerda. Na página exibida, clique em Create.

  5. Na página Create, configure os parâmetros e clique em Create.

    Parâmetro

    Descrição

    Name

    Insira um nome para a política de autorização.

    Policy Type

    Defina Policy Type como ALLOW.

    Gateway Scope

    Clique na aba Gateway Scope e defina ASM Gateway como ingressgateway. Na seção Add Request Source, ative RequestPrincipals e insira testing@asm.test.io/demo@asm.test.io na caixa de texto.

  6. Verifique se a política de autorização restringe o acesso com base no emissor.

    1. Execute o comando a seguir para enviar uma requisição com o JWT original.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 401 Unauthorized
      www-authenticate: Bearer realm="http://47.98.25*.***/", error="invalid_token"
      content-length: 79
      content-type: text/plain
      date: Fri, 18 Mar 2022 07:59:00 GMT
      server: istio-envoy

      A requisição falha porque a política de autorização exige que o principal do JWT seja testing@asm.test.io/demo@asm.test.io. O principal do token original, que é testing@asm.test.io/testing@asm.test.io (issuer/subject), não corresponde.

    2. Modifique o JWT para ter um principal de testing@asm.test.io/demo@asm.test.io.

      Na ferramenta JWT, defina a claim iss como testing@asm.test.io e a claim sub como demo@asm.test.io na seção PAYLOAD. Mantenha todas as outras configurações iguais às da etapa anterior.

      // Header
      {
        "alg": "RS256",
        "kid": "59399e22-7a9a-45ed-8c76-7add7863915c",
        "typ": "JWT"
      }
      // Payload
      {
        "foo": "bar",
        "iat": 1623389700,
        "iss": "testing@asm.test.io",
        "sub": "demo@asm.test.io"
      }
    3. Execute o comando a seguir para enviar uma requisição com o JWT recém-gerado.

      curl -I -H "Authorization: Bearer $TOKEN" http://{YOUR_ASM_GATEWAY_ADDRESS}/

      Saída esperada:

      HTTP/1.1 200 OK
      server: istio-envoy
      date: Fri, 18 Mar 2022 07:27:54 GMT

      A requisição é bem-sucedida, confirmando que a política de autorização restringe corretamente o acesso com base no principal do JWT.