2014-09-15 5 views
4

Может ли кто-нибудь рассказать мне, как я могу получить долгоживущий токен доступа для социальных сайтов с помощью spring social. Если возможно, укажите фрагмент кода. Я использую spring 1.1.0spring facebook, linkedIn и twitter API.Долгосрочный токен доступа, используя весенний социальный

ответ

0

No. На сайте разработчика Facebook, они дали эту опцию для долгоживущего маркера доступа: (Введен в вашей ценности для APP_ID, APP_SECRET и EXISTING_ACCESS_TOKEN)

graph.facebook.com/oauth/access_token?client_id=APP_ID&client_secret=APP_SECRET&grant_type=fb_exchange_token&fb_exchange_token=EXISTING_ACCESS_TOKEN 

Если мы недолгая или нормальный токен доступа, мы получим долгоживущий токен доступа.

6

Для Twitter, который использует OAuth 1.0a, токены не истекают. Таким образом, вы должны получить токен, который длится практически навсегда (пока пользователь не отменяет его).

Для Facebook это невозможно (ни в коем случае), чтобы получить токен, который живет вечно. Вы только вариант, чтобы получить токен и использовать его, когда сможете. Как только токен истек, вы должны снова пройти поток авторизации, чтобы получить новый токен. Хорошей новостью является то, что Spring Social предоставляет ReconnectFilter, чтобы помочь вам в этом. См. Пример Spring Social Showcase (https://github.com/spring-projects/spring-social-samples/tree/master/spring-social-showcase), в частности SocialConfig.java и WebMvcConfig.java, чтобы узнать, как настроить ReconnectFilter.

Моя память немного нечеткая в LinkedIn, но я помню, что LinkedIn обрабатывает истекшие жетоны точно так же, как Facebook (т. Е. Вы должны повторно авторизоваться, чтобы получить новый токен). Поэтому ReconnectFilter также должен помочь вам.

Обратите внимание, что поведение, описанное выше для FB и LI, равно , а не в соответствии со спецификацией OAuth 2. По спецификациям обновляются токены обновления, а также токены доступа и могут использоваться для получения нового токена доступа после истечения срока действия оригинала. FB и LI не реализуют часть токена обновления спецификации. Я не знаю, почему именно, но я подозреваю, что это потому, что это более безопасно. Если клиент должен перенаправить пользователя через поток авторизации для получения нового токена, то это означает, что пользователь должен активно использовать приложение и быть участником возобновления токена. Подход к спецификации не требует участия пользователя, за исключением начального потока полномочий - приложение может возобновить токены навсегда, даже если пользователь никогда не использует приложение снова.

+0

Нет в facebook разработчика сайте они дали вариант для долгоживущего маркера доступа .. из этого URL мы можем получить долго жить маркеры доступ https://graph.facebook.com/OAuth/access_token? client_id = APP_ID & client_secret = APP_SECRET & grant_type = fb_exchange_token & fb_exchange_token = EXISTING_ACCESS_TOKEN для этого, если мы даем короткий токен сроку или нормальный доступ мы получим долгоживущий маркер доступа .. я проверил его, генерируется маркер доступа работает более 2 дня .. –

4

Кажется, что нет специальной функции, предназначенной для обмена краткосрочным токеном на долгоживущий. Вот код, который отлично работает для меня:

private static final String CLIENT_ID = "client_id"; 
private static final String APP_SECRET = "app_secret"; 
private static final String GRAPH_API_URL = "https://graph.facebook.com/oauth/access_token"; 
private static final String FB_EXCHANGE_TOKEN1 = "fb_exchange_token"; 
private static final String FB_EXCHANGE_TOKEN = "fb_exchange_token"; 
private static final String CLIENT_SECRET = "client_secret"; 
private static final String GRANT_TYPE = "grant_type"; 
(...) 



public void execute(LoginFlow message) { 

    URI build = UriBuilder 
      .fromPath(GRAPH_API_URL) 
      .queryParam(CLIENT_ID, mClientId) 
      .queryParam(GRANT_TYPE, FB_EXCHANGE_TOKEN1) 
      .queryParam(CLIENT_SECRET, mAppSecret) 
      .queryParam(FB_EXCHANGE_TOKEN, message.getAccessToken()) 
      .build(); 

    String url = build.toString(); 

    Facebook facebook = new FacebookTemplate(message.getAccessToken()); 
    ResponseEntity<String> exchange = facebook.restOperations() 
      .exchange(url, HttpMethod.GET, HttpEntity.EMPTY, String.class); 
    String response = exchange.getBody(); 
    String longTermToken = Utils.extractToken(response); 
    (...) 
} 
+0

Прохладный! Что такое "Utils.extractToken()"? Я нашел этот код примера getQueryStringParam, который может быть полезен. http://stackoverflow.com/questions/2271800/how-to-read-the-parameters-and-value-from-the-querystring-using-java –

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