2016-03-03 3 views
0

Я создал настройку B2C на основе некоторой документации. Я ссылался на следующую ссылку.Azure AD B2C Перенаправления с «#» перед id_token

https://blogs.technet.microsoft.com/ad/2015/09/16/azure-ad-b2c-and-b2b-are-now-in-public-preview/

Так что я настроить redirect_uri, скажем,

"HTTP s: //mycompany.com/login/"

и использовать Google в качестве моего провайдера идентификации. Однако, когда я регистрирую/регистрирую, система перенаправляет меня со страницы регистрации/входа в систему до

«http s: //mycompany.com/login/#id_token=eyJ0eXAi ... "

URL-адрес переадресации, возвращаемый B2C, содержит переменную« id_token », а при ее проверке в« http://calebb.net/ »детали, которые она содержит, как ожидается.

Вопрос, который у меня есть, имеет отметку «#» хэша после redirect_uri и перед переменной id_token. Из-за хэша переменная id_token не отправляется на наш сервер из-за поведения браузеров по умолчанию, чтобы ничего не отправлять после метки хэша. Хэш-метка - это идентификатор фрагмента.

Таким образом, я не могу получить значение id_token.

Есть ли способ преодолеть это ограничение, чтобы наше серверное приложение могло получить значение id_token из URL-адреса, возвращаемого системой B2C? Или это похоже на ошибку в B2C, которая нуждается в исправлении?

Я использую веб-приложение Python/Django.

Спасибо.

ответ

0

Мне не разрешено прокомментировать, поэтому я должен поместить свое замечание в ответ. У меня была такая же проблема с образцом NodeJS B2C несколько минут назад. Я положил маршрут POST на том, что ваш HTTP s: //mycompany.com/login/ конечной точки

app.post('/', 
passport.authenticate('azuread-openidconnect', { failureRedirect: '/login' }), 
    function(req, res) { 
     log.info('We received a POST from AzureAD.'); 
     log.info(req.body.id_token); 
     res.redirect('/'); 
    }); 

, а затем направить его в паспорт JavaScript библиотеки аутентификации.

Возможно, это даст вам указание, и вы можете перенести его на Python/Django.

1

Я не имею права комментировать также,

Если вы используете AngularJS для переднего конца затем включите режим HTML5.

Я использовал это $locationProvider.html5Mode(true);

Согласно AngularJS: Developer Guide

В режиме HTML5, в $ добытчиками сервис определения местоположения и сеттеры взаимодействуют с браузер URL-адрес через API истории HTML5. Это позволяет использовать использование обычных URL-адресов и поисковых сегментов вместо их хэш-записей эквивалентов.Если API истории HTML5 не поддерживается браузером, то служба $ location вернется к использованию URL-адресов хеш-бэнга автоматически. Это избавляет вас от необходимости беспокоиться о том, поддерживает ли браузер ваше приложение API истории или нет; служба определения местоположения $ прозрачно использует наилучшую доступную опцию.

Открытия регулярного URL в унаследованном браузере -> перенаправляет к hashbang URL hashbang Открытия URL в современном браузере -> переписывает на регулярную URL Обратите внимание, что в этом режиме, угловые перехватывает все ссылки (при условии в «Правила перезаписи HTML-ссылок» ниже) и обновляет URL-адрес , который никогда не выполняет полную перезагрузку страницы.

+0

Не могли бы вы объяснить, почему включение режима HTML5 поможет решить проблему OP? Это может сделать еще лучший ответ/решение. – Castaglia