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 fotosTodas 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!