Quais são algumas técnicas viáveis para combinar a proteção CSRF com APIs RESTful?

Estou interessado em saber quais abordagens as pessoas adotaram ao criar uma API RESTful (ou quase-RESTful) para seus aplicativos Web.

Um exemplo prático:

Digamos que você tenha um aplicativo Web tradicional baseado em navegador que use proteção CSRF em todos os formulários. Uma entrada oculta com um token de proteção CSRF é incluída em cada formulário apresentado no navegador. Após o envio do formulário, se essa entrada não corresponder à versão do token do lado do servidor, o formulário será considerado inválido.

Agora diga que deseja expor o aplicativo Web como uma API (talvez usando JSON em vez de HTML). Tradicionalmente, ao publicar uma API, considerei as transações unilaterais (ou seja, o consumidor da API cria a solicitação com base na API publicada, em vez de primeiro solicitar um formulário e depois criar uma solicitação usando o formulário retornado).

A abordagem "unilateral" é interrompida quando fatores como o fator de proteção CSRF entram em cena. O token de proteção CSRF precisa ser incluído em qualquer POSTS / PUTS / DELETES enviado pelo consumidor da API.

Eu tenho tentado pensar na melhor maneira de resolver isso. Solicitar um formulário cada vez que uma chamada de API precisa ser feita parece muito estranho (especialmente quando se lida com operações assíncronas), mas todas as outras alternativas que eu pensei por mim parecem derrotar a proteção CSRF (ou pelo menos fazer furos nela) ), o que é inaceitável.

Algum de vocês tem uma visão sobre isso?

Obrigado.

(Não que isso importe demais, pois o problema é conceitual e independente de plataforma, mas estou lidando com uma pilha LAMP tradicional e usando o Symfony 1.4 como minha estrutura de aplicativo. Meu objetivo é publicar uma API da Web no formato JSON, permitindo que os desenvolvedores para criar aplicativos para dispositivos móveis / computadores que se adaptem bem a um aplicativo da web existente.)

questionAnswers(1)

yourAnswerToTheQuestion