Будьте внимательны к двойному кодированию URL полезной нагрузки SSO

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

Некоторые из наших проблем включали:

  • Новые пользователи не могли войти на форум
  • Существующие пользователи получали 7 в конце своего имени пользователя при первом входе
  • sso_sync отклонял изменения имени пользователя

Оказалось, что всё это было вызвано двойным URL-кодированием нашего SSO-набора данных. Мы кодировали его, помещали в URL вместе с подписью и кодировали снова. Поскольку строки в формате base64 могут содержать символ =, он кодировался ДВАЖДЫ в %253D вместо %3D, как должно быть. Я не знаю, почему это ломало Discourse только иногда, но надеюсь, что если у кого-то возникнет такая же проблема, это может помочь.

4 лайка