2015-11-12 2 views
2

Я пишу экспресс-приложение, и я должен аутентифицировать пользователя, используя поток oauth 2.0. Я успешно перенаправил пользователя поставщику oauth, и поставщик отправил токен доступа в oauth callback. Что-то вродеАнализ фрагмента URL-адреса в экспресс-приложении

http://localhost:4000/oauth/callback#access_token=<token> 

Теперь у меня есть экспресс-обработчик маршрута как

app.get('/oauth/callback', function(req, res, next) { 
}); 

Я знаю, что фрагмент хэш не передается на сервер, но это OAuth обратного вызова.

Как я могу получить фрагмент хэша url в обработчике маршрута?

+2

«Я знаю, что хэш-фрагмент не передан серверу» - остановитесь прямо там. Если кто-то отправляет фрагмент через HTTP, обратный вызов или нет, они нарушают протокол, и библиотеки не должны это учитывать. Используйте обычный параметр GET: 'http: // localhost: 4000/oauth/callback? Access_token = '. – Amadan

+1

@ Амадан - это ошибка в [contentful] (https://www.contentful.com/developers/docs/references/authentication), и я не понимаю, почему это так. Это любитель. – Syed

+1

URL-адрес содержит параметр «access_token». Это означает, что вы использовали Implicit Flow. В Implicit Flow параметры должны быть встроены в часть фрагмента. Это НЕ ошибка сервера OAuth. –

ответ

0

Я работаю для Довольных.

К сожалению, на данный момент работает наш обратный вызов OAuth, и мы не отправляем обратно параметр строки запроса. Я упомянул об этом и обсудил это, и мы исправим это в какой-то момент, но на данный момент у нас нет точных временных рамок.

Лучшее, что вы можете сделать на данный момент, - это показать вам обычную HTML-страницу из вашего экспресс-приложения, в которой есть javascript, который будет извлекать токен из window.location.hash, а затем сделать запрос к вашему/oauth/callback ? access_token = конечная точка маркера.

+0

Мне просто интересно, в чем преимущество использования хэша вместо querystring? Я этого раньше не видел. – simo

+1

Это не совсем выгодно, но это поток, обычно используемый для приложений браузера на стороне клиента, который был наиболее ожидаемым вариантом использования, когда это было первоначально реализовано. Как я уже сказал, это недосмотр, что мы не реализовали другие потоки, но это будет исправлено. – trodrigues

4

URL-адрес содержит параметр access_token. Это означает, что вы использовали Implicit Flow. В Implicit Flow параметры должны быть встроены в часть фрагмента. Поведение НЕ является ошибкой сервера OAuth.

Если вы хотите получать параметры через часть запроса, вы должны использовать Authorization Code Flow.

Кроме того, если сервер OAuth поддерживает OAuth 2.0 Form Post Response Mode, конечная точка перенаправления может принимать данные в виде запроса POST, добавив response_mode=form_post к вашему запросу авторизации. Спецификация аналогична идее, описанной trodrigues.

В таблице ниже показана взаимосвязь между «response_type/response_mode» и «Состояние/положение HTTP-данных».

enter image description here

Смотрите "Response Format" в Authlete «s Definitive Guide для получения подробной информации о формате отклика authorization endpoint.

+0

Я являюсь соучредителем Authlete, Inc.Извините за ссылки на наш веб-сайт, но трудно найти такую ​​информацию на этом уровне в других местах. –

+0

Да, Google зарегистрировал его таким же образом (https://developers.google.com/identity/protocols/OAuth2UserAgent), спасибо за головы! – simo

+0

@TakahikoKawasaki Спасибо за подробное объяснение. Это отвечает на мой вопрос. Я не говорил, что это ошибка в провайдере ouath 2. Вопрос состоял в том, чтобы знать, «возможно ли разобрать хэш-фрагмент на стороне сервера в oauth callback». Таблица отвечает на мой вопрос, ясно, что этот тип деталей нелегко доступен для поиска в Google. – Syed

 Смежные вопросы

  • Нет связанных вопросов^_^