gpt4 book ai didi

java - 使用 JOAuth 库在 LinkedIn 中发布职位

转载 作者:行者123 更新时间:2023-12-01 15:49:46 27 4
gpt4 key购买 nike

这是我在 LinkedIn Job Posting API implementation in Java 上发布的问题的延续。我对这种基于 OAuth 的职位发布身份验证很陌生,并且也在这个过程中学习。如果我的问题非常基本/幼稚,请耐心等待。

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

  1. 在 JOAuth 链接所示的示例中,如何获取 LinkedIn 的请求 token ?我没有找到任何请求Request Token的语句。但我可以看到 consumer.generateRequestAuthorizationUrl(ResponseType.CODE, redirectUri, null, (String[])null));
  2. 如果我想使用基于 oob 的回调重定向,那么我需要在 redirectUri 中传递/设置什么?
  3. 如果一切顺利并且我拥有访问 token ,我最终如何在 http://api.linkedin.com/v1/jobs 提交/发送我的作业数据 XML ?

最佳答案

你很困惑。 LinkedIn 使用 OAuth 1 协议(protocol)而不是 OAuth 2 协议(protocol)。以下是您如何对 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 接收授权 token 的服务。

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_URL 设置为指向配置为 JOAuth 的 OAuth Servlet,因为您将收到授权 token 。

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

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

获得访问 token 后,您可以使用 LinkedIn API 并使用访问 token 发布职位。 JOAuth 旨在仅检索访问 token ,而不与现有的其他 API 进行通信。

关于java - 使用 JOAuth 库在 LinkedIn 中发布职位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6340298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com