VK Oauth: ошибка безопасности

Я пытаюсь авторизовать отдельное приложение. Но после нажатия кнопки "Разрешить" он всегда перенаправляется на http://oauth.vk.com/error?err=2 и дает это как тело ответа:

{"error":"invalid_request", "error_description":"Security Error"}

Вот URL запроса (у меня есть правильный client_id):

https://oauth.vk.com/authorize?client_id=...&scope=messages,offline&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.37&response_type=token

Кажется, я все перепробовал:

  • Включение и выключение приложения
  • Переходя scope как битовая маска
  • URI, кодирующий некоторые параметры, чтобы иметь правильный URL
  • и так далее

1 ответ

Решение

После часа поисков я нашел это.

Таким образом, это означает, что пользователь имеет старый сеанс и должен повторно войти в браузер.

Пространство в state параметр вызывает это.

OAuth 2 RFC, разделы 4.1.1 о запросе на авторизацию и 4.1.2 об ответе на авторизацию, рекомендует использовать state параметр для сохранения состояния в потоке кода авторизации, особенно для предотвращения CSRF.

Когда я устанавливаю это поле в CSRFTOKEN123 http://my.site/next/urlЯ получил эту ошибку. Замена (пробел) с : получить CSRFTOKEN123:http://my.site/next/url помогает.

Кстати, я не смог найти упоминаний о state параметр на сайте документации VK, но система авторизации VK OAuth 2 его поддерживает. В противном случае его нельзя назвать OAuth 2. Поэтому я нахожу законным использовать state параметр.

Тема https://vk.com/topic-17680044_30635058 упомянутая автором, закрыта, текущее обсуждение - https://vk.com/topic-1_24428376. Есть ряд вопросов по этому вопросу. Все на русском.

Другие вопросы по тегам