Rejestrowanie zewnętrznych loginów Web API 2 z wielu klientów API z Tożsamością OWIN

Chciałbym następującą architekturę (nazwa tego produktu została utworzona dla tego przykładu):

Aplikacja Web API 2 uruchomiona na jednym serwerze http://api.prettypictures.com

Aplikacja kliencka MVC 5 uruchomiona na innym serwerze http://www.webpics.com

chciałbymwww.webpics.com aplikacja kliencka do korzystania z interfejsu API Pretty Pictures do:

Zarejestruj nowe konta za pomocą nazwy użytkownika i hasłaZarejestruj nowe konta w serwisach Facebook / Google / Twitter / MicrosoftZaloguj SięPobierz zdjęcia

Wszystkie powyższe prace oprócz rejestracji zewnętrznych kont za pomocą Facebooka, Google itp.

Nie mogę wypracować prawidłowego przepływu, aby utworzyćzewnętrzny konto od oddzielnego klienta API API.

Zbadałem większość dostępnych dokumentów dotyczących przepływu uwierzytelniania, takich jak:

Przeczytałem prawie wszystko, co mogę na temat nowego modelu tożsamości w OWIN.

Sprawdziłem szablon SPA w Visual Studio 2013. Pokazuje on, jak zrobić większość tego, czego potrzebuję, ale tylko wtedy, gdy klient i API są na tym samym hoście; jeśli chcę, aby wielu klientów uzyskiwało dostęp do mojego interfejsu API i mogło pozwolić użytkownikom rejestrować się za pośrednictwem Google itp., nie działa i o ile mogę powiedzieć, że przerwy w uwierzytelnianiu OWIN.

Oto jak dotąd przepływ:

Użytkownik przegląda dowww.webpics.com/Loginwww.webpics.com połączeniaapi.prettypictures.com/Account/ExternalLogins (za pomocąreturnUrl ustawić, aby wrócić do wywołania zwrotnego wwww.webpics.com) i wyświetla wynikowe linki do użytkownikaUżytkownik klika „Google”Przeglądarka przekierowuje doapi.prettypictures.com/Account/ExternalLogin z nazwą dostawcy itp.APIExternalLogin akcja wywołuje wyzwaniegoogle.comPrzeglądarka zostanie przekierowana dogoogle.comUżytkownik wprowadza swoją nazwę użytkownika i hasło (jeśli nie są jeszcze zalogowani)google.com)google.com teraz przedstawia poświadczenie bezpieczeństwa:„api.prettypictures.com” chciałby uzyskać dostęp do Twojego adresu e-mail, imienia, żony, dzieci itd. Czy to jest w porządku?Użytkownik klika „Tak” i zostaje przywróconyapi.prettypictures.com/Account/ExternalLogin z plikiem cookie ustawionym przez Google.

Tu utknąłem. To, co ma się wydarzyć, to jakoś aplikacja kliencka powinna zostać powiadomiona, że ​​użytkownik pomyślnie się uwierzytelniłgoogle.com i otrzymasz jednorazowy kod dostępu, aby później zamienić się na token dostępu. W razie potrzeby aplikacja kliencka powinna mieć możliwość monitowania użytkownika o nazwę użytkownika, która ma być powiązana z jego nazwągoogle.com Zaloguj Się.

Nie wiem, jak to ułatwić.

W rzeczywistości w tym momencie przeglądarka kończy pracęapi.prettypictures.com/Account/ExternalLogin punkt końcowy po wywołaniu zwrotnym z Google. Interfejs API jest zalogowany w Google, ale klient nie wie, jak sobie z tym poradzić. Czy powinienem wrzucić to ciasteczko z powrotemwww.webpics.com?

W aplikacji SPA odbywa się za pośrednictwem AJAX igoogle.com zwróci token jako fragment adresu URL i wszystko działa dobrze, ponieważ wszystkie znajdują się w jednej domenie. Ale to jest sprzeczne z punktem „API”, z którego wielu klientów może w pełni korzystać.

Wsparcie!

questionAnswers(1)

yourAnswerToTheQuestion