我正在尝试创建一个Java类,该类将调用Google的API,以具有新权限/更大范围的用户帐户重新创建访问令牌。该类将由我创建的Java servlet实例化。我希望该类中的函数返回一个新的访问令牌。对于这个类,我使用的是Scribe库。
在Scribe的quick guide中,有两个步骤让我感到困惑,让我难过:
第三步:让用户验证您的请求令牌
让我们帮助您的用户授权您的应用执行OAuth调用。对于 这需要将它们重定向到以下URL:
String authUrl = service.getAuthorizationUrl(requestToken);
在此之后,用户将获得验证码(如果这是一个OOB) 请求)或者您将通过验证者从Twitter收到重定向 和requestToken(如果你提供了callbackUrl)
第四步:获取访问令牌
现在您(以某种方式)验证者,您需要交换您的 accessToken的requestToken和verifier,它是以前的 签署请求。
Verifier v = new Verifier("verifier you got from the user");
Token accessToken = service.getAccessToken(requestToken, v); // the requestToken you had from step 2
似乎没有指定如何从用户那里获取verifier
。我该怎么做?如何将我的用户重定向到authURL
,如何让它将verifier
发送回我的这个类,该类发起了请求?
如果不清楚,让我以不同的方式构建问题,将Scribe从等式中取出:要从Google获取授权码(用于获取刷新令牌和访问令牌),我将执行以下操作servlet中的URL连接(是的,我已经尝试在没有Scribe库的情况下回答这个问题,但仍然无法弄清楚):
URL authURL = new URL("https://accounts.google.com/o/oauth2/auth");
HttpsURLConnection authCon = (HttpsURLConnection) authURL.openConnection();
authCon.setRequestMethod("GET");
authCon.setDoOutput(false);
authCon.setConnectTimeout(100000);
authCon.setRequestProperty("response_type", "code");
authCon.setRequestProperty("client_id", CLIENT_ID);
authCon.setRequestProperty("redirect_uri",
"http://**************.com/parseAuth/");
authCon.setRequestProperty("scope", convertToCommaDelimited(scopes));
authCon.setRequestProperty("state", csrfSec);
authCon.setRequestProperty("access_type", "offline");
authCon.setRequestProperty("approval_prompt", "auto");
authCon.setRequestProperty("include_granted_scopes", "true");
我遇到的问题是我应该为redirect URI
提出的问题。在获得用户对新作用域的批准后,此授权URL将向redirect URI
返回授权代码,而对于任何称为它的内容似乎都没有。 (我在这方面是否正确?)因此,如果我有另一个servlet作为redirect URI
来解析/从响应中提取授权代码,那么如何在世界范围内将授权代码恢复到我的第一个,初始servlet?在我看来,在调用URL的代码的相同位置,没有办法让它将值返回给servlet。看起来函数必须在那里结束,所有新操作必须在新的servlet中进行。但是,如果是这种情况,我将该身份验证代码发送给Google的API,该API会将刷新令牌和访问令牌发送回ANOTHER servlet,我会将其作为redirect URI
,我怎么可能得到那些信息回到了什么叫做初始servlet?这似乎是问题的核心问题,我遇到的问题是Scribe。
我已经坚持了好几个小时,似乎无法弄清楚我应该做些什么。 我觉得我错过了一些关键的概念,元素或步骤。我需要澄清这一点。如果它完全相关,我的servlet托管在Jboss
上的OpenShift
应用服务器上。