【问题标题】:how to get access token from request token for OpenID + OAuth using java如何使用 java 从 OpenID + OAuth 的请求令牌中获取访问令牌
【发布时间】:2011-04-29 01:20:15
【问题描述】:

我正在尝试在我的 Google 应用程序中实现 OpenID + OAuth 混合协议。 我正在获取请求令牌。因此,作为联合登录中的文档的下一步是交换请求令牌以获取访问令牌。

我尝试使用 OAuth java 库,但没有获得访问令牌。我正在尝试 3-legged 和 2-legged 方法都没有成功。

有没有人成功地做混合协议。

    GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
        oauthParameters.setOAuthConsumerKey(consumerKey);
        oauthParameters.setOAuthConsumerSecret(consumerSecret);

        calendarService = new CalendarService("marketplace-hello");
        try {
            calendarService.setOAuthCredentials(oauthParameters, 
new OAuthHmacSha1Signer());
            CalendarEventFeed results = calendarService.query(calendarFeedUrl, 
CalendarFeed.class);
        }
 catch (OAuthException e) 
{      
throw new ServletException("Unable to initialize calendar service", e); 
}

这是抛出 com.google.gdata.client.authn.oauth.OAuthException: oauth_token 不存在。

oAuthParameters.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);和 xoauth_requestor_id attibute to feedURL 如果我在代码中添加这些行我得到 Invalid AuthSub Token 异常我不知道为什么它说 Invalid AuthSub。

【问题讨论】:

  • 您需要包含更多信息。 为什么不起作用?出了什么问题?是否有任何错误信息?解释你是如何尝试的。我们不介意读者。
  • OAuth 规范有 2 个规范 1) 3-legged 和 2) 2-legged。在三足中涉及 3 方 1) 服务提供者 2) 消费者和 3) 用户 在 2 足中仅涉及 2 方 1) 服务提供者和 2) 消费者和用户是同一实体(属于同一域)。我提到的上述代码是用于不需要访问令牌的 2-legged 身份验证过程。但是在请求时需要消费者密钥和秘密密钥,他需要提供同一域的电子邮件 ID,例如:user@cosnumerkey。这是我们使用 2-legged 身份验证过程的唯一场景。
  • 为什么不使用现有的库?

标签: java openid oauth google-openid


【解决方案1】:

我的回答here可能会对你有所帮助。

或者用你的 requestToken 试试这个:

import net.oauth.OAuth;
import net.oauth.OAuthAccessor;
import net.oauth.OAuthConsumer;
import net.oauth.OAuthMessage;
import net.oauth.OAuthServiceProvider;
import net.oauth.client.OAuthClient;
import net.oauth.client.httpclient4.HttpClient4;

public class Try {

    public static void doit(String requestToken) throws Exception {

        String requestUrl = "https://www.google.com/accounts/OAuthGetRequestToken";
        String authorizeUrl = "https://www.google.com/accounts/OAuthAuthorizeToken";
        String accessUrl = "https://www.google.com/accounts/OAuthGetAccessToken";
        String consumerKey = "XXXXX";
        String consumerSecret = "XXXXX";
        String callbackUrl = "XXXXX";

        OAuthServiceProvider provider = new OAuthServiceProvider(requestUrl,
                authorizeUrl, accessUrl);

        OAuthConsumer consumer = new OAuthConsumer(callbackUrl, consumerKey,
                consumerSecret, provider);

        consumer.setProperty(OAuth.OAUTH_SIGNATURE_METHOD, OAuth.HMAC_SHA1);

        OAuthClient client = new OAuthClient(new HttpClient4());

        OAuthAccessor accessor = new OAuthAccessor(consumer);
        accessor.requestToken = requestToken;

        OAuthMessage result = client.getAccessToken(accessor, null, null);

        System.out.println(accessor.accessToken);
        System.out.println(accessor.tokenSecret);
    }
}

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 2011-08-06
    • 2014-02-17
    • 2011-09-19
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多