Не работает token vk

Чтобы получить сервисный ключ доступа, выполнил следующий запрос:

https://oauth.vk.com/access_token?client_id=айдиv=5.92 84e7dade84e7dade845ec0a47884822efb884e784e7dadedf6a458d2a70dfa1b02e190b [expires_in] => 0 )

Но дальше при выполнении запроса:

https://api.vk.com/method/groups.isMember?group_id=айдиaccess_token=84e7dade84e7dade845ec0a47884822efb884e784e7dadedf6a458d2a70dfa1b02e190b

В response приходит ошибка:

«error_code»:28,»error_msg»:»Application authorization failed: access_token has expired»

Почему так происходит? Запросы выполнял, как из PHP скрипта, так и из url браузера.

Ответы (1 шт):

Так я разобрался с этим api и вам НЕ нужно получать ключ, а нужно просто взять этот Сервисный ключ доступа с этой страницы https://vk.com/editapp?id=YOUR_APP_ID и подставить его в параметр access_token в url

Например получим id-ы юзеров моей группы:

https://api.vk.com/method/groups.getMembers?group_id=blitz.bintv=5.95

Остальное по аналогии в документации

ВК СЛОМАЛОСЬ. НЕ РАБОТАЕТ. #вконтакте

Источник: husl.ru

OAuth2, Spring Авторизация через vk — ошибка invalid_token_response tokenType cannot be null

https://xxxx.ru/redirect?error=[invalid_token_response] An error occurred while attempting to retrieve the OAuth 2.0 Access Token Response: Error while extracting response for type [class org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse] and content type [application/json;charset=utf-8]; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: An error occurred reading the OAuth 2.0 Access Token Response: tokenType cannot be null; nested exception is java.lang.IllegalArgumentException: tokenType cannot be null

Почему tokenType не может быть null не могу понять.

Настройку oauth client я делаю в коде по скольку все конфиги лежал в базе.

Выбор клиента авторизации

public class CustomOAuth2Provider < public static ClientRegistration getGoogle(SocialNetworkDataModel model) < return CommonOAuth2Provider.GOOGLE.getBuilder(model.getProvider().name()) .scope(model.getScope().split(«,»)) .redirectUriTemplate(«/oauth2/callback/») .clientId(model.getAppId()).clientSecret(model.getSecret()).build(); > public static ClientRegistration getVk(SocialNetworkDataModel model) < ClientRegistration.Builder builder = getBuilder(model.getProvider().name(), ClientAuthenticationMethod.POST, «//oauth2/code/»); builder.scope(model.getScope().split(«,»)); builder.authorizationUri(«https://oauth.vk.com/authorize?v=5.95»); builder.tokenUri(«https://oauth.vk.com/access_token»); builder.userInfoUri(«https://api.vk.com/method/users.get»); builder.clientName(«vkontakte»); builder.redirectUriTemplate(«/oauth2/callback/»); builder.clientId(model.getAppId()); builder.clientSecret(model.getSecret()); builder.registrationId(«vk»); return builder.build(); > >
Отслеживать
задан 9 июн 2019 в 19:51

Dvortsevoy Eugene Dvortsevoy Eugene
81 1 1 серебряный знак 6 6 бронзовых знаков

VK API получаем токен группы и standalone access token

У вас удалось решить проблему? Я сегодня всю ночь просидел и вчерне задачу решил, хотя у меня и очень некрасиво получилось, т.к. пришлось совсем глубоко закопаться в недра спринга чтобы вручную прикреплять токены к запросам и прокидывать email юзера через цепочку запросов. И всё потому, что у ВК сделано странно: мыло возвращается вместе с access_token , запрос на который требует client_id и client_secret в качестве параметров, вместо Basic авторизации, а запрос юзера имеет нестандартный формат и также не принимает токен в заголовке.

Еще по теме:  Что за слово Вконтакте ответы 2 уровень

4 авг 2019 в 12:11
Мне пришлось подсунуть свой accessTokenResponseClient в WebSecurityConfigurerAdapter
5 авг 2019 в 14:35
Ага, я примерно так же сделал и как-то оно заработало, хотя нервов съело очень много)
5 авг 2019 в 14:40

помогла статься baeldung.com/spring-security-custom-oauth-requests. Реализовал свой CustomTokenResponseConverter от implements Converter, OAuth2AccessTokenResponse> где руками проставляю OAuth2AccessToken.TokenType accessTokenType = OAuth2AccessToken.TokenType.BEARER; Как оказалось vk не возвращает тип токена и спрингу сносит крышу.

5 авг 2019 в 14:57

Ага, я точно также и сделал и потом эту же статью нашёл) Правда, пришлось ещё с настройками клиента помучиться — ВК хочет form для clientAuthenticationMethod и userInfoAuthenticationMethod .

5 авг 2019 в 15:00

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Потратив почти весь день закопавшись в глубь sprign разбираясь что же не так, я нашел в чем была проблема, надеюсь эта информация кому то сэкономит кучу времени и нервных клеток.

Оказывается Vk в ответе получения токена не возвращается тип токена token_type Bearer, от сюда и срабатывает исключение «tokenType cannot be null». Но это часть проблемы, также Vk в месте с токеном возвращает email пользователя, плюс на запрос информации о пользователе по токену, ответ зачем то заворачивается в дополнительное поле «response» из за этого в OAuth2UserService при попытке получить Map срабатывает исключение. Запрос и разбор ответа пришлось делать вручную.

Для решения этой проблемы мне очень помогли статьи мною глубоко уважаемого Вaeldung.

  • https://www.baeldung.com/spring-security-custom-oauth-requests
  • https://www.baeldung.com/spring-security-5-oauth2-login

1.Oбработчик ответа получения токена.

тут и происходит вся магия, вот эта строчка — OAuth2AccessToken.TokenType accessTokenType = OAuth2AccessToken.TokenType.BEARER;

2.Настраиваем клиента получения информации о пользователе по токену. ClientRegistration

public static ClientRegistration getVk() < ClientRegistration.Builder builder = getBuilder(«vk», ClientAuthenticationMethod.POST, «//oauth2/code/»); builder.scope(«xxxxx»); builder.authorizationUri(«https://oauth.vk.com/authorize?v=5.95»); builder.tokenUri(«https://oauth.vk.com/access_token»); builder.userInfoUri(«https://api.vk.com/method/users.get?fields=photo_id,verified,sex,bdate,city,country,photo_max,home_town,has_photolang=ru); builder.clientName(«vkontakte»); builder.redirectUriTemplate(«/oauth2/callback/»); builder.clientId(«xxxxx»); builder.clientSecret(«xxxx»); builder.userNameAttributeName(«user_id»); builder.registrationId(«vk»); return builder.build(); >

Еще по теме:  Как удалить все сообщения в ВК

3.Настраиваем CustomOAuth2UserService от DefaultOAuth2UserService где запрашивается информация о пользователе.

4.Все классы инициализируем в WebSecurityConfigurerAdapter.

Источник: ru.stackoverflow.com

VK API token expired

VK API — это набор инструментов, предоставляемых ВКонтакте для разработчиков, которые хотят создавать приложения, интегрированные с VK. Один из ключевых аспектов разработки приложений VK — это работа с токенами VK API. Токен VK API представляет собой уникальный идентификатор, используемый для доступа к VK API. Однако, иногда разработчики могут столкнуться с сообщением «VK API Token Expired».

Что это означает и как решить эту проблему? Посмотрим в этой статье.

Что такое токен VK API?

Токен VK API — это уникальный идентификатор, который выдается пользователям, когда они авторизуют доступ сторонних приложений у себя на странице ВКонтакте. Это позволяет приложениям использовать VK API для получения доступа к данным пользователя.

ВКонтакте предоставляет несколько видов токенов VK API, для разных целей:
— access_token — используется для доступа к данным пользователя;
— service_token — используется для доступа к определенным функциям VK API, таким как получение списка друзей.

Токен VK API имеет срок действия, который может быть продлен при необходимости. Если токен VK API устарел или истек, приложение не сможет получить доступ к данным пользователя. Разработчикам необходимо обратить внимание на срок действия токена и своевременно продлевать его.

Что значит «VK API Token Expired»?

Когда разработчик получает сообщение «VK API Token Expired», это означает, что использованный токен VK API устарел и больше не является действительным. Это может произойти по следующим причинам:
— Истек срок действия токена;
— Пользователь отзывает разрешения для сторонних приложений;
— Пользователь меняет пароль или логин;
— Разработчик ошибочно указал неправильный токен VK API.

Еще по теме:  Чем занимаются участники программы vk testers

Как решить проблему «VK API Token Expired»?

Когда токен устарел, разработчики могут просто продлить срок его действия. Для этого необходимо использовать метод «auth.refreshToken» VK API, чтобы получить новый токен. Этот метод возвращает новый токен с теми же разрешениями и настройками доступа, что и старый токен.

Чтобы использовать метод «auth.refreshToken», разработчик должен иметь access_token с правом offline, который позволяет продлить срок действия токена VK API без дополнительных запросов к пользователю.

Пример кода для продления токена VK API с помощью PHP:

$oldToken = ‘access_token=. ‘; // Старый access_token $serviceToken = ‘12345678’; // service_token ВКонтакте $userId = 12345; // Идентификатор пользователя // URL запроса $requestUrl = ‘https://api.vk.com/method/auth.refreshToken?’ . ‘access_token=’ . $oldToken . ‘user_id=’ . $userId; // Отправка GET-запроса $response = json_decode(file_get_contents($requestUrl), true); // Новый токен VK API $newToken = $response[‘response’][‘token’]; // Использование нового токена VK API // .

В приведенном выше примере кода $oldToken — это старый access_token, который нужно продлить. $serviceToken — это service_token ВКонтакте, который используется для продления срока действия токена. $userId — идентификатор пользователя, для которого был получен старый токен.

Метод «auth.refreshToken» должен быть вызван с использованием HTTPS. Разработчик должен убедиться, что происходит корректная проверка SSL-сертификата.

Токен VK API — это ключевой элемент разработки приложений, интегрированных с VK. Работа с токенами VK API очень важна для того, чтобы убедиться в том, что приложение имеет доступ к нужным данным и функциям. Если разработчик столкнется с проблемой «VK API Token Expired», он должен использовать метод «auth.refreshToken», чтобы получить новый токен VK API и продлить срок его действия.

Похожие записи:

  1. Expected primary-expression before ‘:’ token expected `;’ before ‘:’ token
  2. Как изменить expired password администратора windows через сессию обычного пользователя?
  3. Как исправить ошибку The page has expired due to inactivity?
  4. Fluentd + WebHDFS + kerberos = ошибка «webhdfs check request failed Ticket expired»
  5. Вконтакте: ошибка «Code is invalid or expired»

Источник: qaa-engineer.ru

Рейтинг
( Пока оценок нет )
Загрузка ...