SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
02.12.2024

Adicionando Cabeçalho de Autorização em <img src> no Vue.js

Visão Geral Rápida

Para enviar um cabeçalho de autorização ao exibir uma imagem, utilize o processamento de proxy do lado do servidor. Usando Node.js e Express, a imagem é buscada com suas credenciais e encaminhada ao cliente:

app.get('/imagem', async (req, res) => {
  const imgResponse = await fetch('URL_DA_IMAGEM', { headers: { 'Authorization': 'Bearer TOKEN' } });
  res.type(imgResponse.headers.get('content-type'));
  imgResponse.body.pipe(res);
});

Em seu HTML, defina o atributo src do elemento <img> para apontar para o caminho do proxy:

<img src="/imagem" alt="Imagem Protegida" />

Por favor, substitua 'URL_DA_IMAGEM' pela URL real da imagem e 'TOKEN' pelo seu token. O servidor atua como um mediador, entregando a imagem ao cliente sem divulgar dados sensíveis.

Usando JavaScript para Cumprir Sua Missão Secreta

Se você precisar de mais controle do lado do cliente e quiser evitar usar um proxy de servidor, considere as seguintes abordagens:

Fetch API: Seu Agente Secreto para Buscar Imagens

A Fetch API permite que você solicite imagens com cabeçalhos específicos:

fetch('URL_DA_IMAGEM', {
  headers: {
    'Authorization': 'Bearer TOKEN'
  }
})
.then(response => response.blob())
.then(blob => {
  const imageUrl = URL.createObjectURL(blob);
  document.getElementById('imagem').src = imageUrl;
});

Um Blob é um arquivo em formato binário que pode ser convertido em uma URL para exibição via uma tag <img>.

Service Worker: Interceptando Solicitações

Os Service Workers podem interceptar solicitações e inserir os cabeçalhos necessários:

self.addEventListener('fetch', event => {
  if (event.request.url.endsWith('/imagem')) {
    const newHeaders = new Headers(event.request.headers);
    newHeaders.append('Authorization', 'Bearer TOKEN');
    const modRequest = new Request(event.request, { headers: newHeaders });
    event.respondWith(fetch(modRequest));
  }
});

Com um Service Worker, você pode gerenciar o carregamento de recursos.

Imagens Base64 via data URI

Imagens menores podem ser convertidas para codificação base64 e usadas como data URI:

fetch('URL_DA_IMAGEM', {
  headers: {
    'Authorization': 'Bearer TOKEN'
  }
})
.then(response => response.arrayBuffer())
.then(buffer => {
  const base64Flag = 'data:image/jpeg;base64,';
  const imageStr = arrayBufferToBase64(buffer);
  document.getElementById('imagem').src = base64Flag + imageStr;
});

No entanto, imagens maiores nesse formato podem degradar o desempenho, então use esse método com cautela.

Tokens JWT (JSON Web Tokens)

Os JWTs contêm dados importantes e requerem gerenciamento cuidadoso:

// Lado do servidor: Gerando nonce
app.get('/gerar-nonce', (req, res) => {
  const nonce = createNonce(req.user);
  res.json({ nonce });
});

// Lado do cliente: Buscando imagem com nonce
fetch('/caminho-para-imagem?nonce=' + nonce).then(response => /* ... */);

Validar o nonce com cada solicitação de imagem melhora a segurança.

Visualização

Imagine a tag <img> como uma boate com segurança rigorosa:

       🚪  
     -----
img | 👁️  | src="link_da_boate.jpg"   // Tentativa de entrada sem ingresso
     -----
       🚪

O cabeçalho de autorização é como um ingresso para entrar na boate:

    ---------------------
    | INGRESSO: "Bearer meuToken" |
    ---------------------
       🚪  
     -----
img | 👁️  | src="link_da_boate_com_ingresso.jpg"   // Entrada permitida com ingresso!
     -----
       🚪

Outras Táticas Secretas que Valem a Pena Considerar

É importante ter um conjunto amplo de ferramentas para lidar com cabeçalhos de autorização no contexto da gestão de imagens.

Usando Axios em vez de Fetch

Axios é uma biblioteca para fazer requisições HTTP, oferecendo recursos convenientes e um tratamento de erros melhorado:

axios.get('URL_DA_IMAGEM', {
    responseType: 'arraybuffer',
    headers: {
        'Authorization': `Bearer ${TOKEN}`
    }
})
.then(response => {
    const base64 = Buffer.from(response.data, 'binary').toString('base64');
    document.getElementById('imagem').src = `data:image/jpg;base64,${base64}`;
});

Axios oferece maior controle e é amigável ao usuário.

Middleware para Operações Ocultas

Middleware do lado do servidor pode transformar credenciais de cookies em cabeçalhos de autorização. Middleware do Express é usado para organizar ações do lado do servidor.

Expandindo o Conjunto de Ferramentas

Para desenvolvedores, é benéfico entender as complexidades da Fetch API, Service Workers, codificação Base64, bem como o uso seguro de JWTs e nonces.

Recursos Úteis

  1. Usando Cookies HTTP - HTTP | MDN — Aprenda sobre cookies para autenticação na web.
  2. Codificador de Imagens Base64 — Uma ferramenta para converter imagens em Base64.
  3. GitHub - JakeChampion/fetch: Polyfill para window.fetch JavaScript — Guia para incluir cabeçalhos em requisições Fetch.
  4. Imagem Habilitada para CORS - W3C Wiki — Introdução ao uso de imagens de várias fontes.
  5. URLs de Dados - HTTP | MDN — Usando URLs de Dados em HTTP.
  6. Autenticação HTTP Básica - Wikipedia — Fundamentos da autenticação HTTP básica.
  7. RFC 6749 - O Framework de Autorização OAuth 2.0 — A norma OAuth 2.0 para gerenciamento de autorizações web.

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!