Je voudrais l'architecture suivante (j'ai fait le nom du produit pour cet exemple):
Web API 2 application s'exécutant sur un serveur http://api.prettypictures.com
MVC 5 client application qui s'exécute sur un autre serveur http://www.webpics.com
Je voudrais www.webpics.com client application pour utiliser les Jolies Images de l'API:
- Créez de nouveaux comptes avec le nom d'utilisateur et mot de passe
- Créez de nouveaux comptes avec Facebook/Google/Twitter/Microsoft
- Journal en
- Récupérer des photos
Tous les travaux ci-dessus à l'exception de l'enregistrement externe des comptes avec Facebook, Google etc.
Je ne peux pas travailler sur l'écoulement correct de créer un externe compte d'un client, utilisateur de l'API.
J'ai étudié la plupart des documents disponibles sur le flux d'authentification, comme ceci:
J'ai lu à peu près tout ce que je peux sur le nouveau modèle d'Identité dans OWIN.
J'ai examiné le SPA modèle dans Visual Studio 2013. Il montre comment faire la plupart de ce dont j'ai besoin, mais uniquement lorsque le client et l'API sont sur le même hôte; si je veux de plusieurs clients à accéder à mon API et d'être en mesure de permettre aux utilisateurs de s'inscrire via Google etc. il ne fonctionne pas et aussi loin que je peux dire à la OWIN le flux d'authentification des pauses.
En voici le déroulement:
- L'utilisateur accède à www.webpics.com/Login
- www.webpics.com appels api.prettypictures.com/Account/ExternalLogins (avec un returnUrl set pour revenir à un rappel à www.webpics.comet affiche l'résultant des liens de l'utilisateur
- L'utilisateur clique sur "Google"
- Le navigateur redirige vers api.prettypictures.com/Account/ExternalLogin avec le nom du fournisseur, etc.
- L'API de ExternalLogin action instancie un défi à google.com
- Le navigateur est redirigé vers google.com
- L'utilisateur entre son nom d'utilisateur et le mot de passe (si elles ne sont pas déjà connecté à google.com)
- google.com aujourd'hui il présente la cote de sécurité: "api.prettypictures.com" souhaitez avoir accès à votre adresse e-mail, nom, femme, enfants, etc. Est-ce OK?
- L'utilisateur clique sur "Oui" et est pris api.prettypictures.com/Account/ExternalLogin un cookie est que Google a mis.
C'est là que j'ai bloqué. Ce qui est censé se passer est en quelque sorte l'application client doit être informé que l'utilisateur est authentifié avec succès avec google.com et être soumis à un usage unique code d'accès à l'échanger pour un jeton d'accès plus tard. L'application client doit avoir la possibilité, si nécessaire, demander à l'utilisateur un nom d'utilisateur à associer à leurs google.com connexion.
Je ne sais pas comment faciliter cette.
En fait, à ce stade, le navigateur finit par s'assit à la api.prettypictures.com/Account/ExternalLogin point de terminaison après le rappel de Google. L'API est signé pour Google, mais le client ne sait pas comment le gérer. Dois-je la pipe que cookie www.webpics.com?
Dans le SPA de l'application, il est fait via AJAX et google.com retourne un jeton comme un fragment d'URL et tout fonctionne très bien, parce que tout se trouve sur un domaine. Mais qui défie bien de la point d'avoir une "API" que plusieurs clients peuvent utiliser pleinement.
À l'aide!