微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用JOAuth库在LinkedIn中发布作业

如何解决使用JOAuth库在LinkedIn中发布作业

| 这是我在Java上的LinkedIn Job Posting API实现上发布的问题的延续。我是发布作业的基于OAuth的身份验证的新手,并且在此过程中也正在学习。如果我的问题非常基础/天真,请与我一起接受。 我正在尝试使用JOAuth库进行OAuth身份验证并将作业发布到LinkedIn。我正在使用OAuth2调用。我对JOAuth库有以下疑问: 在JOAuth链接显示的示例中,如何获取LinkedIn的请求令牌?我找不到任何请求请求令牌的声明。但我看到
consumer.generateRequestAuthorizationUrl(ResponseType.CODE,redirectUri,null,(String[])null));
如果我想使用基于oob的回调重定向,那么我需要在
redirectUri
中传递/设置什么? 如果一切成功,并且我拥有访问令牌,那么我最终如何在http://api.linkedin.com/v1/jobs上提交/发送我的Job数据XML?     

解决方法

        你很困惑。 LinkedIn使用OAuth 1协议,而不是OAuth 2协议。这是您对LinkedIn进行Oauth 1授权的方法。 如果要创建Web应用程序,请在
WEB-INF
文件夹下创建一个
oauth-config.xml
文件,并进行以下配置:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<oauth-config>
    <!-- LinkedIn OAuth Config -->
        <oauth name=\"linkedIn\" version=\"1\">
                <consumer key=\"API_KEY\" secret=\"API_SECRET\" />
                <provider requestTokenUrl=\"https://api.linkedin.com/uas/oauth/requestToken\" authorizationUrl=\"https://api.linkedin.com/uas/oauth/authorize\" accessTokenUrl=\"https://api.linkedin.com/uas/oauth/accessToken\" />
        </oauth>

        <service path=\"/authorize_ready\" class=\"com.neurologic.example.LinkedInOAuthService\" oauth=\"linkedIn\">
                <success path=\"/start.htm\" />
        </service>
</oauth-config>
LinkedIn使用OAuth版本1(因此使用该版本)。 在您的
WEB-INF\\web.xml
下,添加以下内容:
<servlet>
    <description>An OAuth Servlet Controller</description>
    <display-name>OAuthServlet</display-name>
    <servlet-name>OAuthServlet</servlet-name>
    <servlet-class>com.neurologic.oauth.servlet.OAuthServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/oauth-config.xml</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>OAuthServlet</servlet-name>
    <url-pattern>/oauth/*</url-pattern>
</servlet-mapping>
现在,我们需要创建一个服务,该服务将从Linked In接收授权令牌。
package com.neurologic.example;

import javax.servlet.http.HttpServletRequest;

import net.oauth.signature.OAuthSignature;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.v1.AccessToken;
import net.oauth.token.v1.RequestToken;

import com.neurologic.oauth.service.impl.OAuth1Service;

/**
 * @author Buhake Sindi
 * @since 31 May 2011
 *
 */
public class LinkedInOAuthService extends OAuth1Service {

    public static final String LINKED_IN_REQUEST_TOKEN_SESSION = \"LINKED_IN_REQUEST_TOKEN_SESSION\";
    public static final String LINKED_IN_ACCESS_TOKEN_SESSION = \"LINKED_IN_ACCESS_TOKEN_SESSION\";

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.impl.OAuth1Service#getOAuthSignature()
     */
    @Override
    protected OAuthSignature getOAuthSignature() {
        // TODO Auto-generated method stub
        return new OAuthHmacSha1Signature();
    }

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.impl.OAuth1Service#getRealm()
     */
    @Override
    protected String getRealm() {
        // TODO Auto-generated method stub
        return null;
    }

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.impl.OAuth1Service#getRequestToken(javax.servlet.http.HttpServletRequest)
     */
    @Override
    protected RequestToken getRequestToken(HttpServletRequest request) {
        // TODO Auto-generated method stub
        return (RequestToken) request.getSession().getAttribute(LINKED_IN_REQUEST_TOKEN_SESSION);
    }

    /* (non-Javadoc)
     * @see com.neurologic.oauth.service.OAuthService#saveAccessToken(javax.servlet.http.HttpServletRequest,java.lang.Object)
     */
    @Override
    public void saveAccessToken(HttpServletRequest request,AccessToken accessToken) {
        // TODO Auto-generated method stub
        request.getSession().setAttribute(LINKED_IN_ACCESS_TOKEN_SESSION,accessToken);
    }
}
现在,使用以下示例:
package com.neurologic.example;

import net.oauth.consumer.OAuth1Consumer;
import net.oauth.exception.OAuthException;
import net.oauth.provider.OAuth1ServiceProvider;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.v1.AccessToken;
import net.oauth.token.v1.AuthorizedToken;
import net.oauth.token.v1.RequestToken;

/**
 * @author Buhake Sindi
 * @since 14 June 2011
 *
 */
public class LinkedInExample {

    private static final String LINKEDIN_API_URL = \"https://api.linkedin.com\";
    private static final String API_KEY = \"\";
    private static final String API_SECRET  = \"\";
    private static final String CALLBACK_URL = \"http://localhost:8080/myapp/oauth/authorize_ready\";
    private OAuth1Consumer consumer;


    /**
     * 
     */
    public LinkedInExample() {
        super();
        // TODO Auto-generated constructor stub
        consumer = new OAuth1Consumer(API_KEY,API_SECRET,new OAuth1ServiceProvider(LINKEDIN_API_URL + \"/uas/oauth/requestToken\",LINKEDIN_API_URL + \"/uas/oauth/authorize\",LINKEDIN_API_URL + \"/uas/oauth/accessToken\"));
    }

    public RequestToken requestUnauthorizedRequestToken() throws OAuthException {
        return consumer.requestUnauthorizedToken(null,CALLBACK_URL,null,new OAuthHmacSha1Signature());
    }

    public String getAuthorizationUrl(RequestToken token) throws OAuthException {
        return consumer.createOAuthUserAuthorizationUrl(token,null);
    }

    public AccessToken requestAccessToken(AuthorizedToken authorizedToken,RequestToken token) throws OAuthException {
        return consumer.requestAccessToken(null,authorizedToken,token.getTokenSecret(),new OAuthHmacSha1Signature());
    }


    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            LinkedInExample example = new LinkedInExample();
            RequestToken rt = example.requestUnauthorizedRequestToken();

            //Now that we have request token,let\'s authorize it....
            String url = example.getAuthorizationUrl(rt);

            //Copy the URL to your browser and make sure that OAuth 1 Servlet is running....
        } catch (OAuthException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
如您所见,“ 9”设置为指向配置为JOAuth的OAuth Servlet,因为您将收到一个“授权令牌”。 您必须确保通过
RequestToken getRequestToken(HttpServletRequest request)
方法将未授权的请求令牌返回给服务,因为您将需要它来检索访问令牌。 当LinkedIn返回访问令牌时,将调用服务
saveAccessToken()
方法。您可以登录以验证是否返回了访问令牌。 获得访问令牌后,就可以使用LinkedIn API并使用访问令牌发布作业。 JOAuth设计为仅检索访问令牌,并且不与存在的其他API通信。     ,        为了澄清一些事情: 1)这是两条腿的OAuth 1.0a调用。您不需要做OAuth跳舞。 2)这些不需要oob或类似的东西。 3)您使用所选的OAuth库生成Authorization标头,然后发送HTTP POST。 快速入门:http://developer.linkedin.com/docs/DOC-1299 话虽这么说,我会再说一遍,这是一个封闭的程序,因此,除非您与一组列入特殊许可的伙伴一起,否则即使您解决了上述所有问题,您的通话也会失败。 此外,职位发布者在其LinkedIn帐户中还需要工作人员对您的应用程序进行额外授权,以使您的请求成功,并且相关数据必须位于XML POST正文中。 根据您对此提出的疑问,如果您是列入白名单的合作伙伴,请与LinkedIn Jobs API小组联系,我们将为您提供更多帮助。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。