2012-03-13 2 views
2

LinkedIn API와 통합 된 클라이언트 용 애플리케이션을 만들고 있습니다. 너무 많은 문제없이 인증을 통과했지만, 모든 작업이 진행 중이고 이제는 실제 요청을해야합니다. 주로 Share API에서 작업하고 있습니다. 나는 다음과 같은 메소드를 사용하여 HTTP 호출을 만들 :LinkedIn API에 대한 OAuth 요청으로 인해 401 오류가 발생했습니다.

public any function sendRequest(any req){ 
    var param = false; 
    var headParams = []; 
    var bodyParams = []; 
    var call = new http(proxyserver='192.168.201.12', proxyport=8888); 
    var i = 1; 

    call.setUrl(Arguments.req.getRequestUrl()); 
    call.setMethod(Arguments.req.getMethod()); 

    getSigner().signRequest(Arguments.req); 

    headParams = Arguments.req.getParameters(true); 
    bodyParams = Arguments.req.getParameters(); 

    if(arrayLen(bodyParams)){ 
     call.addParam(
     type='header', 
     name='Authorization', 
     value="OAuth#Variables.encoder.encodedParameter(Arguments.req.getParameters(true), true, false, true)#" 
    ); 
    } 

    // Header parameters 
    if(!arrayLen(bodyParams)){ 
     for(i=1; i<=arrayLen(headParams); i++){ 
     param = headParams[i]; 
     call.addParam(
      type=Arguments.req.getParameterType(), 
      name=Variables.encoder.parameterEncodedFormat(param.name), 
      value=param.value 
     ); 
     } 
    } 

    // Body parameters (should only be 1) 
    if(arrayLen(bodyParams)){ 
     for(i=1; i<=arrayLen(bodyParams); i++){ 
     param = bodyParams[i]; 
     call.addParam(
      type='xml', 
      value=param.value 
     ); 
     } 
    } 
    return call.send().getPrefix(); 
    } 

내가 요청을 등록 할 때, 나는 다음과 같은 방법을 사용합니다

public void function signRequest(any req){ 
    var headParams = Arguments.req.getParameters(true); 
    var bodyParams = Arguments.req.getParameters(); 
    var secret = "#Variables.encoder.parameterEncodedFormat(getConsumer().getConsumerSecret())#&#Variables.encoder.parameterEncodedFormat(Arguments.req.getOAuthSecret())#"; 
    var base = ''; 

    params = Variables.encoder.encodedParameter(headParams, true, true); 
    params = "#params#&#Variables.encoder.parameterEncodedFormat(bodyParams[1].value)#"; 

    secret = toBinary(toBase64(secret)); 

    local.mac = createObject('java', 'javax.crypto.Mac').getInstance('HmacSHA1'); 
    local.key = createObject('java', 'javax.crypto.spec.SecretKeySpec').init(secret, local.mac.getAlgorithm()); 

    base = "#Arguments.req.getMethod()#&"; 
    base = base & Variables.encoder.parameterEncodedFormat(Arguments.req.getRequestUrl()); 
    base = "#base#&#Variables.encoder.parameterEncodedFormat(params)#"; 
    //writeDump(base) abort; 
    local.mac.init(local.key); 
    local.mac.update(JavaCast('string', base).getBytes()); 

    Arguments.req.addParameter('oauth_signature', toString(toBase64(mac.doFinal())), true); 
    } 

내가 시도 (헤더 만 매개 변수로 보통의 OAuth PARAMS 그것을 서명을) 그리고 body 매개 변수 (xml 문자열)를 포함하지만, 모든 것이 나에게 401 오류를 주므로 요청에 서명 한 기본 문자열에서 무엇을 사용해야하는지 궁금합니다.

답변

0

질문에 대한 적절한 답변이 아니지만 도움이 될 수 있습니다.

필자의 경우 CF8과 함께 LinkedIn API를 사용하여 여러 번 실패한 후 필자는 마침내 포기하고 더 많은 시간을 갖지 못했습니다. "적절한"통합 대신에 linkedin-j Java 라이브러리를 사용했습니다. 마침내 날 잡았고 서명 문제가 더 이상 발생하지 않았습니다.

OAuth가 필요한 모든 통합에 대해 Btw this 라이브러리를 사용했으며 LinkedIn API와 마찬가지로 서명 문제가 없습니다.

+0

루카스, 나는 API 커넥터를 구현하기 위해 linkedin-j를 사용하기 시작했다. 그러나 일단 OAuth 구현을 끝내고 API 메소드로 이동하면이 오류가 계속 발생했다 : ' javax.xml.bind.JAXBException : "com. google.code.linkedinapi.schema "ObjectFactory.class 또는 jaxb.index'를 포함하지 않습니다. 네가 그걸 다룰 지 궁금해했다. 어떻게 그걸 넘겼 는가? –

+0

여기에서 어떤 우편 번호를 얻었습니까? http://code.google.com/p/linkedin-j/downloads/list? linkedin-j-1.0.415-binary.zip 또는 1.0.429 베타 2 진 파일을 가져와야합니다. * 모든 * JAR 파일을 가져 와서 서버에 있어야합니다 (설치 프로그램에 따라 다름, 일반적으로 # server.ColdFusion.ROOTDIR # \ lib \에 있음). 그런 다음 CF를 다시 시작해야합니다. 게시 한 오류에서 JAR 중 하나가 누락 된 것으로 보입니다. – Lucas

+0

실제로 JavaLoader를 사용하고 있으며 JAXB가 올바르게 작동하기 위해 몇 가지 특별한 사항을 포함하기 위해 linkedin-j JAR을 다시 컴파일해야했습니다. 이슈 페이지의 이슈 # 53에있었습니다. –