2014-11-03 21 views
6

Dołączyłem Satellizer do mojej aplikacji z różnymi dostawcami usług społecznościowych (Facebook, Twitter, Google). Mój stos składa się z: AngularJS (router UI) i NodeJS/Express.OAuth: jak ustawić dynamiczny adres URL połączenia zwrotnego?

Wydaje mi się, że napotykam na problem polegający na ustawianiu dynamicznych adresów URL wywołania zwrotnego do uwierzytelniania użytkownika. Moja aplikacja nie ma stałego adresu URL logowania, takiego jak http://example.com/login, ponieważ wszystkie moje adresy URL są dynamiczne i oparte na tokenach, na przykład: http://example.com/XH12aT1771. W efekcie moja strona logowania użytkownika jest nakładką modalną i nie ma żadnej spójnej strony logowania.

Wyzwanie związane z moim systemem w integracji z OAuth następuje po zalogowaniu użytkownika do mojej aplikacji przez nakładkę modalną, chcę umieścić je z powrotem w pokoju (lub tokenie), w którym się znajdują, a nie przekierowywać do niektórych stronę z adresem URL połączenia zwrotnego, ponieważ byłaby to słaba jakość obsługi.

Jest to jedyny sposób, aby mój adres URL wywołania zwrotnego OAuth został zakodowany na stałe, na przykład: http://example.com/success, a następnie przekierować użytkownika z powrotem do ich tokenu po tym, jak trafili na stronę /success? Czy to naprawdę jedyny sposób na zrobienie czegoś takiego?

Daj mi znać, jeśli potrzebujesz więcej informacji na pytania, dziękuję za pomoc.

+0

Użyłem 3rd party OAuth 2 dla niektórych zastosowań, ale nigdy nie znalazł konieczność tworzenia statycznych adresów URL zwrotnych . Powinien pasować tylko do adresu bazowego (np. Http: // example.com /) i nie powinniśmy zawracać sobie głowy tym, co jest napisane po tym. – Kop4lyf

+0

Czy próbowałeś ustawić go na http: // localhost? – DaImTo

+1

Adres URL wywołania zwrotnego jest zwykle zakodowany na określonej ścieżce. Może mógłbyś spróbować, by trafili na trasę z tokenem, a następnie przekierowywali ją na adres zwrotny? Pozostaję pod http://passportjs.org/ w moich aplikacjach node.js, więc nie wiem, co jest możliwe. – cchamberlain

Odpowiedz

1

nie wiem o opcjach, które Sattelizer daje, i to również zależy od opcji obsługiwanych przez serwer autoryzacji (AS), ale:

Z punktu widzenia bezpieczeństwa jest to wskazane, aby użyć stałego adres URL wywołania zwrotnego mimo to zapobiega niektórym atakom, które mogą się zdarzyć z powodu złamania/niechlujstwa adresów URL po stronie AS, lub przypadkowego wycieku tokenów dla stron trzecich po stronie RP z powodu osadzonych obrazów/ramek iframe na stronach, które nie zużywają tokena itd.

Niezależnie od tego, czy jest inny sposób, dobrą praktyką w zakresie bezpieczeństwa byłoby korzystanie ze stałego adresu URL wywołania zwrotnego i można (miejmy nadzieję) kojarzyć źródło al URL z parametrem stanu, który zostanie wysłany lub wstawiony do pliku cookie i przywrócony po zużyciu tokena na adres URL wywołania zwrotnego.

1

Nie jestem zaznajomiony z Satellizerem, ale zbudowałem strukturę wywołania zwrotnego oauth opartą na dynamicznym adresie URL.

$callback_url = Configure::read('Your.base') . 'connect/provider/signin/' . $invite_code; 

Wyłączamy unikalny URL, który umieszcza kogoś w konkretnym pomieszczeniu.

1

Nie znam Satelizera, ale po krótkim przeczytaniu wydaje się, że istnieje możliwość skonfigurowania adresu URL wywołania zwrotnego po zalogowaniu.

// Google 
$authProvider.google({ 
    url: '/auth/google', 
    authorizationEndpoint: 'https://accounts.google.com/o/oauth2/auth', 
    redirectUri: window.location.origin || window.location.protocol + '//' + window.location.host, 
    scope: ['profile', 'email']; 
    scopePrefix: 'openid'; 
    scopeDelimiter: ' ', 
    requiredUrlParams: ['scope'], 
    optionalUrlParams: ['display'], 
    display: 'popup', 
    type: '2.0', 
    popupOptions: { width: 452, height: 633 } 
}); 

Tutaj konfigurują przekierowanie uri bezpośrednio do lokalizacji, w której aktualnie znajduje się użytkownik. Zobacz Satelizer Configuration

Czy to nie jest to, czego szukasz?

0

Wydaje się, że odpowiedź powinna być co kfis powiedział lub -

$authProvider.loginRedirect = '/'; // Change this relative path 

per - Satellizer