Como passar o Id do Facebook do cliente para o servidor com segurança

Eu tenho um aplicativo de tela do Facebook. Eu estou usando o JS SDK para autenticar o usuário no lado do navegador e solicitar várias informações via FB.api (por exemplo, nome, amigos, etc.).

Eu também quero persistir algumas informações adicionais do usuário (não mantidas no Facebook) para o banco de dados no meu servidor, fazendo uma chamada ajax:

{ userFavouriteColour: "Red" }

Para salvar isso no servidor e associar com o usuário correto, eu preciso saber o uid do Facebook e isso apresenta um problema. Como faço para passar o uid do cliente para o servidor.

Opção 1: adicione o uid ao pedido do ajax:

{ uid: "1234567890",
  userFavouriteColour: "Red" }

Isso obviamente não é bom. Seria trivial para qualquer um fazer um pedido de ajax para meu serviço da web usando o ID do Facebook de outra pessoa e alterar sua cor favorita.

Opção 2: no servidor, extraia o uid de um cookie: Isso é possível? Eu li que o Facebook define um cookie contendo o uid e token de acesso, mas eu tenho acesso a este cookie no meu domínio? Mais importante, possocom segurança extrair o formulário uid o cookie ou está aberto para falsificação como opção 1.

Opção 3: autenticação do usuário no servidor no servidor: Eu poderia usar a autenticação do lado do servidor para validar a identidade do usuário no meu servidor. Mas isso funcionará se eu já estiver usando a autenticação do lado do cliente no navegador? Vou acabar com dois tokens de acesso diferentes? Eu gostaria de fazer solicitações FB.api do navegador, então eu preciso do token de acesso no cliente (não apenas no servidor).

Este deve ser um cenário muito comum, então acho que estou perdendo algo fundamental. Eu li muito da documentação do Facebook (vários fluxos de autenticação, tokens de acesso, signed_request, etc.) e muitos posts sobre o SO, mas ainda não entendi como a autenticação do lado do cliente e a autenticação do lado do servidor funcionam juntas.

Em suma, eu quero saber a identidade do usuário no servidor, mas ainda fazer solicitações para a API do Facebook a partir do navegador do cliente?

(Estou usando o asp.net e o Facebook c # SDK no servidor)

EDITAR: Adicionado recompensa. Eu estava esperando obter uma recomendação oficial mais deifnitiva sobre como lidar com essa situação, ou mesmo um exemplo. Como já disse, eu já li muitos dos documentos oficiais do FB sobre fluxos de autenticação, mas ainda não consigo encontrar nada definitivo sobre como a autenticação do lado do cliente e do lado do servidor funciona em conjunto.

questionAnswers(4)

yourAnswerToTheQuestion