2014-11-03 3 views
6

Я включил Satellizer в свое приложение с различными поставщиками социального входа (Facebook, Twitter, Google). Мой стек состоит из: AngularJS (UI Router) и NodeJS/Express.OAuth: как установить динамический обратный URL?

Кажется, что я сталкиваюсь с проблемой настройки динамических обратных вызовов для аутентификации пользователей. В моем приложении нет, который содержит согласованный URL-адрес входа, такой как http://example.com/login, потому что все мои URL-адреса являются динамическими и основанными на токенах, например: http://example.com/XH12aT1771. Фактически, мой пользовательский интерфейс - это модальный оверлей, и нет постоянной страницы входа в систему.

Задача с моей системой в интеграции с OAuth заключается в том, чтобы после входа пользователя в мое приложение через модальное наложение, я хочу вернуть их в нужную комнату (или токен), в которой они находятся, а не перенаправить их на некоторые страницы обратного вызова, так как это будет плохой пользовательский интерфейс.

Это единственный способ сделать мой код обратного вызова OAuth жестко запрограммированным, что-то вроде: http://example.com/success, а затем перенаправить пользователя обратно в свой токен после того, как они попали на страницу /success? Действительно ли это единственный способ сделать такое?

Сообщите мне, если вам нужны дополнительные детали, спасибо за помощь.

+0

Я использовал третий участник OAuth 2 для некоторых приложений, но не нашел необходимость создания статических URL-адресов обратного вызова , Он должен соответствовать только базовому url (например, http: // example.com /), и не следует беспокоиться о том, что написано после этого. – Kop4lyf

+0

вы пробовали установить его на http: // localhost? – DaImTo

+1

URL-адрес обратного вызова обычно жестко привязан к определенному пути. Может быть, вы могли бы попробовать, чтобы они ударили по маркерному маршруту, а затем перенаправили их на URL обратного вызова? Я придерживаюсь http://passportjs.org/ в моих приложениях node.js, поэтому не уверен, что возможно. – cchamberlain

ответ

1

Я не знаю, о возможностях, которые Sattelizer дает вам, и это будет также зависеть от параметров, поддерживаемых сервер авторизации (AS), но:

С точки зрения безопасности рекомендуется использовать фиксированный обратного вызова в любом случае, чтобы предотвратить некоторые из атак, которые могут произойти из-за неправильного или неаккуратного сопоставления URL-адресов на стороне AS или случайной утечки токена третьим сторонам на стороне RP из-за встроенных изображений/фреймов на страницах, которые не потребляют токен и т. д.

Так что независимо от того, есть ли другой способ, было бы хорошей практикой безопасности использовать фиксированный URL обратного вызова в любом случае, и вы можете (надеюсь) связать источник al URL с параметром состояния, который отправляется или помещается в файл cookie, и восстанавливает его после использования токена на URL-адресе обратного вызова.

1

Я не знаком с Satellizer, но я создал динамическую структуру обратного вызова oauth.

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

Мы оставляем уникальный URL-адрес, который помещает кого-то в определенную комнату.

1

Я не знаком с Satelizer, но после короткого чтения, похоже, есть возможность настроить URL-адрес обратного вызова после входа в систему.

// 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 } 
}); 

Здесь они настраивают перенаправление uri непосредственно в местоположение, в настоящее время находится пользователь. Satelizer Configuration

Не так ли, что вы ищете?

0

Похоже, ответ должен быть, что kfis сказал или -

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

за - Satellizer