2017-02-03 25 views
2

При запросе кода авторизации, если параметр url состояния имеет следующее значение, https://login.microsoftonline.com/oauth2/authorize дает мне плохой запрос.Azure Active Directory OAuth 2.0 Авторизация дает неверный запрос

state=%3C%3CMULE_EVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

Если удалить закодированные значения: << и >>, он работает хорошо. В настоящее время у меня есть некоторые ограничения, и я не могу удалить эти значения.

В сообщении documentation указано, что «состояние» - это значение, включенное в запрос, который также будет возвращен в ответном сигнале. Это может быть строка любого контента, который вы хотите.

ответ

2

Двойной < < >> оказывается семантически неверно, хотя эти символы разрешены в https://tools.ietf.org/html/rfc6749#appendix-A.5 (ссылки синтаксис ABNF для этой области, которая, по существу, все печатаемые символы включая пробел, VSCHAR, https://tools.ietf.org/html/rfc5234).

Однако, когда мы смотрим на предполагаемое использование поля состояния, оно должно использоваться для отправки токена обратно из службы, чтобы ваше приложение могло проверять локальное состояние, чтобы избежать атак CSRF.

В большинстве случаев короткая строка должна быть достаточной, и вы, вероятно, сделаете себе одолжение, если будете держать строку коротким, сохраняя байты на проводе и дополнительные служебные данные синтаксического анализа.

Существует хороший обзор, используя oauth2 конечную точку здесь (правда, с Bing Ads, но принципы и рекомендации применимы к данному случаю):

https://msdn.microsoft.com/en-us/library/bing-ads-user-authentication-oauth-guide.aspx

Если я могу найти точные ограничения на поле штата я уточню свой ответ.

1

Ну, документация кажется немного неправильной. Я тестировал различные строки состояний, и то, что заставляет его терпеть неудачу, начинается строка состояния с % 3C. Значит, в некоторых местах в строке есть знак меньше, чем знак.

EDIT: Есть что-то действительно странное.

Это не удается:

state=MUL%3CE_EVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

Но это работает:

state=MULE%3C_EVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

Но это также не:

state=MULE_%3CEVENT_ID%3D0-6cadfe22-e9ea-11e6-99ff-205120524153%3E%3E 

Моя теория состоит в том, что она делает все, что выглядит как не позволяют допустимый тег HTML. Вот почему это позволило бы % 3C _....% 3D, но *% 3Ca% 3e нет. Вы можете заменить a на любые символы a-z. Так HTML элементы не являются нет-нет :)

+0

Отлично, я посмотрю, что я могу с этим поделать. –

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

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