Registrando Logons Externos da API da Web 2 de Vários Clientes da API com Identidade OWIN

Gostaria da seguinte arquitetura (criei o nome do produto para este exemplo):

Aplicativo Web API 2 em execução em um servidor http://api.prettypictures.com

Aplicativo cliente MVC 5 em execução em outro servidor http://www.webpics.com

eu gostariawww.webpics.com aplicativo cliente para usar a API Pretty Pictures para:

Registrar novas contas com nome de usuário e senhaRegistre novas contas no Facebook / Google / Twitter / MicrosoftConecte-seRecuperar fotos

Todas as opções acima funcionam, exceto o registro de contas externas no Facebook, Google etc.

Não consigo calcular o fluxo correto para criar umexterno conta de um usuário cliente separado da API.

Estudei a maioria dos documentos disponíveis no fluxo de autenticação, assim:

Eu li praticamente tudo o que posso sobre o novo modelo de identidade no OWIN.

Examinei o modelo SPA no Visual Studio 2013. Ele demonstra como fazer a maior parte do que eu preciso, mas apenas quando o cliente e a API estão no mesmo host; se eu quiser que vários clientes acessem minha API e permitir que os usuários se inscrevam pelo Google etc., não funcionará, e até onde eu sei as quebras de fluxo de autenticação OWIN.

Aqui está o fluxo até agora:

O usuário navega parawww.webpics.com/Loginwww.webpics.com chamadasapi.prettypictures.com/Account/ExternalLogins (com umreturnUrl definido para retornar a um retorno de chamada emwww.webpics.com) e exibe os links resultantes para o usuárioO usuário clica em "Google"O navegador redireciona paraapi.prettypictures.com/Account/ExternalLogin com o nome do provedor etc.As APIsExternalLogin ação instancia um desafio paragoogle.comO navegador é redirecionado paragoogle.comO usuário digita seu nome de usuário e senha (se ainda não estiver logado nogoogle.com)google.com agora apresenta a habilitação de segurança:"api.prettypictures.com" gostaria de acessar seu endereço de e-mail, nome, esposa, filhos etc. Está tudo bem?O usuário clica em "Sim" e é levado de volta paraapi.prettypictures.com/Account/ExternalLogin com um cookie que o Google definiu.

É aqui que eu fico preso. O que deve acontecer a seguir é, de alguma forma, que o aplicativo cliente seja notificado de que o usuário foi autenticado com êxitogoogle.com e receba um código de acesso de uso único para trocar por um token de acesso posteriormente. O aplicativo cliente deve ter a oportunidade, se necessário, de solicitar ao usuário um nome de usuário para associar à suagoogle.com Conecte-se.

Não sei como facilitar isso.

De fato, neste ponto, o navegador acaba sentado noapi.prettypictures.com/Account/ExternalLogin endpoint após o retorno de chamada do Google. A API está conectada ao Google, mas o cliente não sabe como lidar com isso. Devo canalizar esse cookie de volta parawww.webpics.com?

No aplicativo SPA, isso é feito via AJAX egoogle.com retornará um token como um fragmento de URL e tudo funcionará bem porque tudo fica em um domínio. Mas isso desafia muito o ponto de ter uma "API" que vários clientes podem usar totalmente.

Socorro!

questionAnswers(1)

yourAnswerToTheQuestion