Получение сообщений обсуждений в LinkedIn Group с помощью ColdFusion - PullRequest
5 голосов
/ 15 марта 2012

Клиент попросил меня загрузить последние сообщения из своей группы LinkedIn на одну из страниц нашего веб-сайта.

Я занимаюсь разработкой с использованием ColdFusion 9, и уже несколько дней занимаюсь этим, и решил разместить здесь свой запрос в надежде, что кто-нибудь сможет мне помочь.

Я могу добраться до точки, где у меня есть requestToken. Насколько я понимаю, теперь мне нужно подписать токен запроса, чтобы получить accessToken. Моя проблема в том, что мне нужно сделать это за кадром. Тем не менее, все примеры, которые я могу найти, перенаправляют интерфейсного пользователя на URL авторизации, чтобы позволить пользователю проходить аутентификацию, но я не хочу, чтобы пользователь проходил аутентификацию, вместо этого я хочу аутентифицировать на стороне сервера.

Я пытаюсь использовать библиотеку Java-оболочки Scribe. Ниже приведен код, который я получил, который получает requestToken (а также URL авторизации). Мне нужно, чтобы кто-то указал мне правильное направление, чтобы подписать токен в коде на стороне сервера, чтобы я мог совершать необходимые вызовы для использования API групп (например, http://api.linkedin.com/v1/groups/{id}/posts?count=5&start=1)

<cfscript>
    var l = {};
    //The LinkedIn public and private keys for application
    l.oauth_consumer_key = "[My public key]";
    l.oauth_sign_key = "[My secret key]";
    l.serviceBuilder = CreateObject("java","org.scribe.builder.ServiceBuilder");
    l.LinkedInApiClass = CreateObject("java", "org.scribe.builder.api.LinkedInApi").getClass();
    l.service = l.serviceBuilder.provider(l.LinkedInApiClass).apiKey(l.oauth_consumer_key).apiSecret(l.oauth_sign_key).callback("[My callback url]").build();
    l.requestToken = l.service.getRequestToken();
    l.authUrl = l.service.getAuthorizationUrl(l.requestToken);

    // I NEED TO DEFINE WHAT TO DO AT THIS POINT TO SIGN THE REQUEST SERVER SIDE
    ...
    ...
</cfscript>

Ответы [ 2 ]

3 голосов
/ 15 марта 2012

Кирстен технически верен - Linked In Api требует аутентификации пользователя. Это раздражает, потому что вам нужно пройти проверку подлинности, чтобы даже получать групповые сообщения.

Однако есть способы обойти это.

С помощью писца вы можете вручную создать токен доступа. Итак, я бы создал фиктивную учетную запись пользователя в Linked In, аутентифицировал бы этого пользователя как обычно и сохранил возвращенные подписанные учетные данные в своей базе данных, которые затем можно использовать для создания токена:

var accessToken = createObject("java", "org.scribe.model.Token").init(
                "singedTokenStringReturnBackFromLinkedIn",
                "singedSecretStringReturnBackFromLinkedIn",
                "oauth_token=singedTokenStringReturnBackFromLinkedIn&oauth_token_secret=singedSecretStringReturnBackFromLinkedIn&oauth_expires_in=0&oauth_authorization_expires_in=0"
            ); 

Затем можно пропустить часть проверки подлинности и вызвать API, позволяющий отображать групповые сообщения без необходимости входа текущего пользователя:

var req = createObject("java", "org.scribe.model.OAuthRequest").init(
            createObject("java", "org.scribe.model.Verb").GET,
            "http://api.linkedin.com/v1/groups/123456/posts"
        );

oAuthService.signRequest(accessToken, req);

Я понятия не имею, нарушит ли это Условия использования Linked In.

2 голосов
/ 15 марта 2012

OAuth-аутентификация предназначена для того, чтобы пользователь давал свое разрешение приложению через логин на сайте (в данном случае LinkedIn). Он не предназначен для автоматического предоставления пользователю разрешения на использование вашего приложения.

Чтобы получить токен доступа для использования API-интерфейсов LinkedIn, необходимо включить часть потока аутентификации, которая отправляет пользователя в LinkedIn, чтобы дать вашему приложению разрешение действовать от его имени, после чего вы можете получить токен верификатора либо с помощью PIN-кода (который вводит пользователь), либо с помощью обратного вызова вашего приложения.

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

...