Os cookies devem ser usados em uma API RESTful?

65

Estou especificamente interessado em saber como os usuários realizam operações autorizadas / autenticadas em uma API da web.

Os cookies de autenticação são compatíveis com a filosofia REST e por quê?

    
por Brandon Linton 22.03.2012 / 19:13
fonte

3 respostas

73

Um serviço ReSTful ideal permite que os clientes (que podem não estar no navegador) executem qualquer tarefa necessária em uma solicitação ; porque o estado completo necessário para isso é mantido pelo cliente, não pelo servidor. Como o cliente tem controle total do estado, ele pode criar o estado sozinho (se isso for legítimo) e apenas falar com a API para "terminar".

A exigência de cookies pode dificultar isso. Para os clientes, além dos navegadores, o gerenciamento de cookies é um grande inconveniente em comparação com os parâmetros de consulta, os cabeçalhos de solicitações simples ou o corpo da solicitação. Por outro lado, no navegador, o uso de cookies pode tornar muitas coisas muito mais simples.

Portanto, uma API pode procurar primeiro no cabeçalho Authorization dos dados de autenticação necessários, pois esse é provavelmente o lugar onde os clientes não navegadores preferirão colocá-lo, mas para simplificar e agilizar os clientes baseados em navegador, também procura um cookie de sessão para login no servidor, mas apenas se o cabeçalho normal Authorization estiver faltando.

Outro exemplo pode ser um pedido complexo que normalmente requer muitos parâmetros definidos. Um cliente não interativo não teria problemas para compactar todos esses dados em uma solicitação, mas uma interface baseada em formulário HTML pode preferir dividir a solicitação em várias páginas (algo como um conjunto de páginas de 'assistente') para que os usuários não sejam apresentados com opções que não são aplicáveis com base nas seleções anteriores. Todas as páginas intermediárias poderiam armazenar os valores em cookies do lado do cliente, de modo que somente a última página, na qual o usuário realmente envia a solicitação, tenha qualquer efeito colateral do servidor. A API poderia procurar os atributos necessários no corpo da solicitação e voltar a analisar os cookies se os parâmetros necessários não estivessem lá.

Editar: no RE ao comentário do @Konrad abaixo:

Tokens in comparison are harder to implement especially because you can't easily invalidate the token without storing them somewhere.

er ... você está validando os cookies no lado do servidor, certo? Só porque você disse ao navegador para descartar um cookie depois de 24 horas não significa que será. Esse cookie pode ser salvo por um usuário altamente técnico e reutilizado por muito tempo depois de ter "expirado".

Se você não quiser armazenar dados da sessão no lado do servidor, deverá armazená-lo no token (cookie ou outro). Um token de autenticação autônomo às vezes é chamado de Macaroon . Como isso é passado entre cliente e servidor (seja por cookie, como extra cabeçalhos, ou na própria entidade solicitante) é totalmente independente do próprio mecanismo de autenticação.

    
por 25.03.2012 / 17:46
fonte
14

Sim e Não - Depende de como você o usa.

Cookies, se usados para manter o estado do cliente no cliente, para o cliente, para o cliente e para o cliente, são repousantes.

Se você está armazenando o estado do servidor no cookie, basicamente você está apenas transferindo a carga para o cliente - o que não é tranquilo.

Então, quais são alguns exemplos?

Repousante:

  • Detalhes de autenticação ou 'está conectado', tipo, coisas
  • última página visualizada ou colocada na aplicação, etc.

Não repousante:

  • Armazenando informações da sessão

O restfulness vem da falta de estado - do servidor. Os clientes podem manter o estado do aplicativo e enviá-lo ao servidor para dizer onde estão, para que o servidor possa decidir para onde ir a partir daí. Basicamente sessões / estados precisam de dados históricos e são dependentes de pedidos passados, por assim dizer, aplicativos relaxantes não são (Não é viável ter um aplicativo 100% puro se você tiver uma tela de login:)

    
por 22.03.2012 / 20:11
fonte
12

Pode-se usar cookies. REST permite-lhes.

O REST requer que qualquer informação de sessão seja armazenada no lado do cliente, mas quando se trata de autenticação, algumas informações devem permanecer no lado do servidor por motivos de segurança.

De um dos meus postagens , há um consenso geral de que os dados de autenticação são considerados fora do escopo em relação ao REST. Portanto, é aceitável que os servidores mantenham alguns desses dados da sessão do lado deles.

    
por 26.10.2012 / 21:38
fonte