Java 使用JOAuth库在LinkedIn中发布作业

Java 使用JOAuth库在LinkedIn中发布作业,java,oauth,linkedin,joauth,Java,Oauth,Linkedin,Joauth,这是我在上发布的问题的继续。我不熟悉这种基于OAuth的发布作业认证,在这个过程中我也在学习。如果我的问题很基本/幼稚,请容忍我 我正在尝试使用库进行OAuth身份验证,并将作业发布到LinkedIn。我正在使用OAuth2调用。我对JOAuth library有以下问题: 在JOAuth链接上显示的示例中,如何获取LinkedIn的请求令牌?我找不到任何请求令牌的语句。但是我可以看到consumer.generateRequestAuthorizationUrl(ResponseType.co

这是我在上发布的问题的继续。我不熟悉这种基于OAuth的发布作业认证,在这个过程中我也在学习。如果我的问题很基本/幼稚,请容忍我

我正在尝试使用库进行OAuth身份验证,并将作业发布到LinkedIn。我正在使用OAuth2调用。我对JOAuth library有以下问题:

  • 在JOAuth链接上显示的示例中,如何获取LinkedIn的请求令牌?我找不到任何请求令牌的语句。但是我可以看到
    consumer.generateRequestAuthorizationUrl(ResponseType.code,redirectUri,null,(String[])null)
  • 如果我想使用基于oob的回调重定向,那么我需要在
    重定向URI
    中传递/设置什么
  • 如果一切都成功,并且我拥有访问令牌,那么最终如何在提交/发送我的工作数据XML

  • 要澄清几件事:

    1) 这是两条腿的OAuth 1.0a呼叫。你不需要跳OAuth舞。 2) 这是没有必要的oob或类似的东西。 3) 您可以使用自己选择的OAuth库生成授权头,并发送HTTP POST

    以下是一个快速开始:

    话虽如此,我将再次重申,这是一个封闭的计划,因此,除非您在一组特殊的白名单合作伙伴中,否则即使您解决了上述所有问题,您的呼叫也将失败

    此外,为了使您的申请成功,您的申请还需要通过他们的LinkedIn帐户中的招聘海报进行额外授权,相关数据需要保存在XML帖子正文中


    根据您对此提出的大量问题,如果您是白名单上的合作伙伴,请与LinkedIn Jobs API团队联系,我们将安排额外的帮助。

    您感到困惑。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>
    
    现在,我们需要创建一个服务,该服务将从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();
            }
        }
    
    }
    
    如您所见,
    CALLBACK\u URL
    设置为指向配置为JOAuth的OAuth Servlet,因为您将收到一个授权令牌

    您必须确保通过
    RequestToken getRequestToken(HttpServletRequest)
    方法将未经授权的请求令牌返回给服务,因为您需要它来检索访问令牌

    LinkedIn返回访问令牌时,将调用服务
    saveAccessToken()
    方法。您可以登录以验证是否返回了访问令牌


    拥有访问令牌后,可以使用LinkedIn API并使用访问令牌发布作业。JOAuth仅用于检索访问令牌,而不与现有的其他API通信。

    是的,我已经注册了此程序。您能否提供一些用Java编写的指针/资源,这些指针/资源可以
    使用您选择的OAuth库生成授权头并发送HTTP POST
    ?我真的很难通过这个。此外,甚至我也在
    jobsapi@linkedin.com
    但还没有回应。如果可能的话,你能安排进一步的帮助吗?不幸的是,注册并不意味着你会被批准。我只提供技术支持,不做那些决定(在这里做更多工作之前,工作小组需要回复你。已经两周了,我还没有收到工作小组的任何回复,允许我发布工作。我还记录了一个请求-。你能帮我加快这一步吗?或者我能找到其他电子邮件/电话吗?@Gnanam:我已经ping了e团队要求他们向您提供状态更新。我真的很惊讶。我还没有收到Jobs团队的任何回复。@TheeletteGentler:根据@Adam,在LinkedIn中发布Jobs时不需要oob或回调,因为它使用两条腿的OAuth 1.0a调用。JOAuth支持两条腿的OAuth调用吗?@Gnanam,y是的,将callback设置为
    oob
    ,您必须自己检索授权令牌。@TheLiteGenister:您能给我一个使用JOAuth对LinkedIn进行两段OAuth调用的工作示例吗?顺便说一句,我们没有将其集成到web应用程序中,因此,如果您能为我提供一个独立的Java应用程序,那就太好了他的。我没有LinkedIn的API密钥。我如何注册它?@TheElite先生:你需要在这里注册以获得API密钥和密钥。对不起,旧的
    joauth_1_2_1.jar
    在为OAuth 1创建
    授权
    头时有缺陷。新的
    joauth_1_3_1.jar
    包含修复程序,并严格遵循了RFC 5849。
    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();
            }
        }
    
    }