2012-03-15 10 views
5

Un cliente me ha solicitado que retire las últimas publicaciones de su grupo de LinkedIn a una de nuestras páginas web.Recuperando mensajes de debate de Linkedin Group utilizando ColdFusion

Estoy desarrollando con ColdFusion 9 y he estado investigando esto durante unos días y he decidido publicar mi consulta aquí con la esperanza de que alguien pueda ayudarme.

Puedo llegar al punto en el que tengo un requestToken. Tengo entendido que ahora necesito firmar el token de solicitud para obtener el accessToken. Mi problema es que tengo que hacer esto detrás de escena. Sin embargo, todos los ejemplos que puedo encontrar están redirigiendo al usuario del front-end a la url de autorización para permitir que el usuario se autentique, pero no quiero que el usuario se autentique; en su lugar, quiero autenticar el servidor.

Estoy tratando de usar la biblioteca de envoltorio Scribe Java. A continuación se muestra el código que tengo hasta ahora que obtiene el requestToken (así como la url de autorización). Necesito que alguien me punto en la dirección correcta para firmar el token en el código del lado del servidor para que pueda hacer las llamadas necesarias a consumir la API de grupos (por ejemplo 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> 
+0

En retrospectiva, probablemente debería haber titulado este hilo _Cómo crear manualmente un LinkedIn accessToken server-side_ – andrewjackson123

Respuesta

3

Kirsten es técnicamente correcto - Linked In Api's requiere autenticación de usuario. Es molesto porque necesita autenticarse incluso para recuperar publicaciones de grupo.

Sin embargo, hay formas de evitarlo.

Con scribe puede crear manualmente un token de acceso. Así que lo que haría es crear una cuenta de usuario simulado en Linked In, autentificar dicho usuario como normales y guardar las credenciales firmadas devueltos en su base de datos, que luego se puede utilizar para crear el token:

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" 
      ); 

A continuación, puede omitir la parte de autenticar y llamar a la API que le permite mostrar los mensajes de grupo sin que el usuario actual tener que iniciar sesión:

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); 

tengo ni idea de si esto violaría eslabonado de a T C & sin embargo.

+0

Gracias @Bfelfellahull. Terminé haciendo esto y funcionó perfectamente. No necesité crear una cuenta ficticia sin embargo. Acabo de usar la misma cuenta que usé para crear la aplicación de LinkedIn para obtener las claves de API. – andrewjackson123

2

autenticación OAuth está diseñado para el usuario para dar su permiso a la aplicación a través de un inicio de sesión en el sitio (en este caso LinkedIn). No está diseñado para que el usuario otorgue automáticamente permiso para su aplicación.

Para obtener un token de acceso para usar las API de LinkedIn, debe incluir la parte del flujo de autenticación que envía al usuario a LinkedIn para dar permiso a su aplicación para actuar en su nombre, momento en el que puede recuperar un token de verificador ya sea a través de PIN (que el usuario ingresa) o a través de una devolución de llamada a su aplicación.

En resumen, no hay forma de "autenticar el servidor" sin que el usuario interactúe con el sitio de LinkedIn.