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: Jun 28, 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, essa configuração verifica se o token de acesso no cabeçalho é confiável e autoriza apenas 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 serviço.

Pré-requisitos

Contexto

Este tópico usa o serviço httpbin como exemplo. Primeiro, utilize uma política RequestAuthentication para restringir as requisições que acessam o serviço 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:

  • Exija que todas as requisições contenham um JWT para acessar o serviço com êxito pelo gateway de entrada usando uma política de autorização.

  • Exija que todas as requisições contenham um JWT de um emissor específico para acessar o serviço com êxito pelo gateway de entrada usando uma política de autorização.

Etapa 1: Implantar o serviço de amostra

  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 do 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 serviço de amostra.

    1. Conecte-se ao cluster usando kubectl e o arquivo KubeConfig do cluster.

    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 serviço 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 do 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 serviço virtual.

    1. Na página de detalhes da instância do 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 Conversão 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 do ASM que deseja configurar. Clique no nome da instância do ASM ou clique em Manage na coluna Actions.

    4. No painel de navegação à esquerda da página de detalhes da instância do 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 serviços podem usar o JWT. Deixe em branco para permitir o acesso a todos os serviços.

      • 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 converte automaticamente essas informações 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 declaração sub com o valor testing@asm.test.io, uma declaração iat com o valor 1623389700 e uma declaração personalizada foo com o valor bar.

  2. Acesse o serviço 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 está funcionando: 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 serviço**

Crie uma política de autorização para exigir que todas as requisições contenham um JWT para acessar o serviço 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 do ASM que deseja configurar. Clique no nome da instância do ASM ou clique em Manage na coluna Actions.

  4. Na página de detalhes da instância do 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 está funcionando: 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 serviço 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 do ASM que deseja configurar. Clique no nome da instância do ASM ou clique em Manage na coluna Actions.

  4. Na página de detalhes da instância do 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 declaração iss como testing@asm.test.io e a declaração sub como demo@asm.test.io na seção PAYLOAD. Mantenha todas as outras configurações iguais às anteriores.

      // 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.