Registrieren von externen Web API 2-Anmeldungen von mehreren API-Clients mit OWIN-Identität

Ich hätte gerne die folgende Architektur (ich habe den Produktnamen für dieses Beispiel erfunden):

Web API 2-Anwendung, die auf einem Server ausgeführt wird http://api.prettypictures.com

MVC 5-Client-App, die auf einem anderen Server ausgeführt wird http://www.webpics.com

Ich würde gernwww.webpics.com Client-App zur Verwendung der Pretty Pictures-API für:

Registrieren Sie neue Konten mit Benutzername und PasswortRegistrieren Sie neue Konten bei Facebook / Google / Twitter / MicrosoftAnmeldungBilder abrufen

Alle oben genannten Funktionen außer der Registrierung externer Konten bei Facebook, Google usw.

Ich kann nicht den richtigen Ablauf für die Erstellung einesextern Konto von einem separaten Client-Benutzer der API.

Ich habe die meisten im Authentifizierungsablauf verfügbaren Dokumente wie folgt untersucht:

Ich habe so ziemlich alles gelesen, was ich über das neue Identitätsmodell in OWIN kann.

Ich habe die SPA-Vorlage in Visual Studio 2013 untersucht. Sie zeigt, wie das meiste getan wird, was ich brauche, aber nur, wenn sich der Client und die API auf demselben Host befinden. Wenn ich möchte, dass mehrere Clients auf meine API zugreifen und Benutzer sich über Google usw. anmelden können, funktioniert dies nicht. Soweit ich weiß, bricht der OWIN-Authentifizierungsfluss.

Hier ist der bisherige Ablauf:

Benutzer navigiert zuwww.webpics.com/Loginwww.webpics.com Anrufeapi.prettypictures.com/Account/ExternalLogins (mit einemreturnUrl um zu einem Rückruf um zurückzukehrenwww.webpics.com) und zeigt die resultierenden Links zum Benutzer anDer Nutzer klickt auf "Google".Der Browser leitet weiter zuapi.prettypictures.com/Account/ExternalLogin mit dem Namen des Anbieters etc.Die APIsExternalLogin Aktion instanziiert eine Herausforderung angoogle.comDer Browser wird weitergeleitet zugoogle.comDer Benutzer gibt seinen Benutzernamen und sein Kennwort ein (sofern er nicht bereits angemeldet ist)google.com)google.com präsentiert jetzt die Sicherheitsüberprüfung:"api.prettypictures.com" möchte Zugriff auf Ihre E-Mail-Adresse, Ihren Namen, Ihre Frau, Ihre Kinder usw. Ist das in Ordnung?Der Benutzer klickt auf "Ja" und kehrt zu zurückapi.prettypictures.com/Account/ExternalLogin mit einem Cookie, das Google gesetzt hat.

Hier stecke ich fest. Als nächstes sollte die Client-App benachrichtigt werden, dass der Benutzer sich erfolgreich authentifiziert hatgoogle.com und Sie erhalten einen einmaligen Zugangscode, um ihn später gegen einen Zugangstoken auszutauschen. Die Client-App sollte bei Bedarf die Möglichkeit haben, den Benutzer zur Eingabe eines Benutzernamens aufzufordern, der ihm zugeordnet werden sollgoogle.com Anmeldung.

Ich weiß nicht, wie ich das ermöglichen soll.

Tatsächlich landet der Browser an diesem Punkt amapi.prettypictures.com/Account/ExternalLogin Endpunkt nach dem Rückruf von Google. Die API ist für Google angemeldet, aber der Client weiß nicht, wie er damit umgehen soll. Soll ich den Keks zurückgeben?www.webpics.com?

In der SPA-App erfolgt dies über AJAX undgoogle.com Gibt ein Token als URL-Fragment zurück und alles funktioniert einwandfrei, da sich alles auf einer Domain befindet. Dies steht jedoch im Widerspruch zu einer "API", die von mehreren Clients vollständig genutzt werden kann.

Hilfe!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage