Buduję aplikację mobilną z wieloma platformami (przy użyciu narzędzi Xamarian, MonoTouch/MonoDroid). Próbuję przepracować proces uwierzytelniania i napotykam przeszkodę. Przeszukałem wszystko, by uzyskać jasną odpowiedź i muszę ją jeszcze znaleźć."Właściwy" sposób na wykonanie OAuth z klienta mobilnego
Oto przegląd mojej obecnej konfiguracji.
Mam stronę internetową zbudowaną w nodejs. Używam pliku passport.js do logowania się na OAuth na stronie internetowej. Działa to świetnie, użytkownicy mogą zalogować się do mojej witryny za pomocą Twittera lub Facebooka.
Teraz chcę rozszerzyć tę samą funkcję logowania do moich klientów mobilnych.
widzę 2 opcje
osadzić app i id app sekret jest w klientów mobilnych i dokonać bezpośredniego OAuth wywołań FB czy Twitter z aplikacji mobilnej
Proxy OAuth wywołań mój istniejących nodejs serwer wWW (utrzymanie tajnych kluczy na serwerze)
Wariant 2 wydaje się być najlepszym sposobem (jak to unika konieczności „statek” THE Sekretariatu t w aplikacjach mobilnych).
Mam podejście proxy działające.
- otworzyć WebView w moim mobilnym klientem i skierować go na
http://mysever/auth/twitter
- biegnie To przez mojego kodu istniejące passport.js i przekierowuje mobilnej WebView nad do strony logowania Twittera.
- Użytkownik następnie wprowadza swoje uprawnienia na stronie internetowej Twittera na urządzeniu.
- Twitter następnie wywołuje mój URL wywołania zwrotnego oAuth (który jest moim serwerem sieciowym nodejs).
- Mój serwer i Twitter zajmują się handlem w czwartek, uzyskując informacje o profilu użytkownika (Jak rozumiem, jest to kluczem do tego podejścia, mój serwer i Twitter obsługują uścisk dłoni, klient mobilny nie musi niczego lub przekazać wszelkie znaki podczas tego procesu)
Oto mój problem:
to właśnie ten ostatni krok, który mnie kikuty. Po zakończeniu uścisk na moim serwerze Mam informacje o użytkowniku muszę na serwerze i trzeba wysłać go z powrotem do aplikacji klienta mobilnego
nie mogę wymyślić żadnego sposobu kontroli WebView chwycić obiekt odpowiedzi i pobierz plik cookie lub wartość nagłówka (na przykład) (wydaje się to prawdą w przypadku systemu Android i iOS). Nie sądzę, że jest to specyficzne dla platformy. Myślę, że próbuję zrobić coś, czego widget WebView na platformach mobilnych po prostu nie obsługuje. To sprawia, że myślę, że brakuje mi czegoś oczywistego.
Jedyne co zorientowali się, to mój serwer WWW „przekierować” przeglądarkę klienta mobilnego do fałszywego adresu URL, który ma Informacja o użytkowniku w ciągu kwerendy. Coś takiego jak myapp: // info? Userid = 1234
Następnie w aplikacji mobilnej mogę przejąć adres URL i pobrać ten URL i uzyskać potrzebne dane. Mogę następnie przechować te informacje o użytkowniku, zamknąć kontrolkę WebView i przejść do natywnego ekranu w mojej aplikacji mobilnej i użytkownik userinfo w każdym kolejnym wywołaniu REST do mojego serwera nodejs, aby zidentyfikować użytkownika.
Jest to bardzo kludgy z wielu powodów. Największym z nich jest to, że adres URL jest wysyłany przez przewód niezaszyfrowany i ma wszystkie dane w postaci zwykłego tekstu.
Musi istnieć lepszy sposób na przeniesienie danych z serwera WWW do klienta mobilnego?
Czy robię to wszystko źle?
jakie podejście czy wreszcie osiąść na? Utknąłem w tym samym dylemacie, że opcja 2 jest podejściem idealistycznym. –
Szczerze mówiąc, nigdy nie znalazłem rozwiązania, które działałoby dobrze. Ogólnie przyjętą rzeczą wydaje się wysłanie sekretu w aplikacji mobilnej. Wydaje się, że ludzie upychają go w aplikacji i nie przejmują się tym zbytnio. –
Ktoś, kto czuje się po prostu jak OAuth, jest kompletnym bałaganem interpretacji i pół implementacji? – Jammer