Autenticação para subscrições push

Se uma subscrição push usar autenticação, o serviço Pub/Sub assina um símbolo da Web JSON (JWT) e envia o JWT no cabeçalho de autorização do pedido push. O JWT inclui reivindicações e uma assinatura.

Os subscritores podem validar o JWT e verificar o seguinte:

  • As reivindicações estão corretas.
  • O serviço Pub/Sub assinou as reivindicações.

Se os subscritores usarem uma firewall, não podem receber pedidos push. Para receber pedidos push, tem de desativar a firewall e validar o JWT. Se um subscritor tiver uma firewall, pode receber um erro 403 permission denied.

Antes de começar

Formato JWT

O JWT é um JWT do OpenIDConnect que consiste num cabeçalho, num conjunto de reivindicações e numa assinatura. O serviço Pub/Sub codifica o JWT como uma string base64 com delimitadores de pontos.

Por exemplo, o seguinte cabeçalho de autorização inclui um JWT codificado:

"Authorization" : "Bearer
eyJhbGciOiJSUzI1NiIsImtpZCI6IjdkNjgwZDhjNzBkNDRlOTQ3MTMzY2JkNDk5ZWJjMWE2MWMzZDVh
YmMiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJodHRwczovL2V4YW1wbGUuY29tIiwiYXpwIjoiMTEzNzc0M
jY0NDYzMDM4MzIxOTY0IiwiZW1haWwiOiJnYWUtZ2NwQGFwcHNwb3QuZ3NlcnZpY2VhY2NvdW50LmNvb
SIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJleHAiOjE1NTAxODU5MzUsImlhdCI6MTU1MDE4MjMzNSwia
XNzIjoiaHR0cHM6Ly9hY2NvdW50cy5nb29nbGUuY29tIiwic3ViIjoiMTEzNzc0MjY0NDYzMDM4MzIxO
TY0In0.QVjyqpmadTyDZmlX2u3jWd1kJ68YkdwsRZDo-QxSPbxjug4ucLBwAs2QePrcgZ6hhkvdc4UHY
4YF3fz9g7XHULNVIzX5xh02qXEH8dK6PgGndIWcZQzjSYfgO-q-R2oo2hNM5HBBsQN4ARtGK_acG-NGG
WM3CQfahbEjZPAJe_B8M7HfIu_G5jOLZCw2EUcGo8BvEwGcLWB2WqEgRM0-xt5-UPzoa3-FpSPG7DHk7
z9zRUeq6eB__ldb-2o4RciJmjVwHgnYqn3VvlX9oVKEgXpNFhKuYA-mWh5o7BCwhujSMmFoBOh6mbIXF
cyf5UiVqKjpqEbqPGo_AvKvIQ9VTQ" 

O cabeçalho e o conjunto de afirmações são strings JSON. Depois de descodificadas, assumem a seguinte forma:

{"alg":"RS256","kid":"7d680d8c70d44e947133cbd499ebc1a61c3d5abc","typ":"JWT"}

{
   "aud":"https://example.com",
   "azp":"113774264463038321964",
   "email":"gae-gcp@appspot.gserviceaccount.com",
   "sub":"113774264463038321964",
   "email_verified":true,
   "exp":1550185935,
   "iat":1550182335,
   "iss":"https://accounts.google.com"
  }

Os tokens anexados a pedidos enviados para pontos finais de envio podem ter até uma hora.

Configure o Pub/Sub para a autenticação push

O exemplo seguinte mostra como definir a conta de serviço de autorização push para uma conta de serviço à sua escolha e como conceder a função iam.serviceAccountTokenCreator ao service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com agente do serviço.

Consola

  1. Aceda à página Subscrições do Pub/Sub.

    Aceda à página Subscrições

  2. Clique em Criar subscrição.

  3. No campo ID da subscrição, introduza um nome.

  4. Selecione um tópico.

  5. Selecione Push como o Tipo de fornecimento.

  6. Introduza um URL de ponto final.

  7. Selecione Ativar autenticação.

  8. Selecione uma conta de serviço.

  9. Certifique-se de que o agente de serviço service-{PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com tem a função iam.serviceAccountTokenCreator no painel de controlo do IAM do seu projeto. Se a conta de serviço não tiver recebido a função, clique em Conceder no painel de controlo do IAM para o fazer.

  10. Opcional: introduza um público-alvo.

  11. Clique em Criar.

gcloud

# Configure the push subscription
gcloud pubsub subscriptions (create|update|modify-push-config) ${SUBSCRIPTION} \
 --topic=${TOPIC} \
 --push-endpoint=${PUSH_ENDPOINT_URI} \
 --push-auth-service-account=${SERVICE_ACCOUNT_EMAIL} \
 --push-auth-token-audience=