Servlets Twitter OAuth“无法验证签名和令牌。”
我很难从Twitter API获得响应。我在这里使用scribe 1.3.5。当从一个页面调用TwitterLoginServlet时,它成功地将我重定向到twitter并允许我登录。但是,在回调上,TwitterCallbackServlet在oAuthResponse中接收以下信息 代码-401 消息-未经授权 正文-验证oauth签名和令牌失败 我对使用servlet和oauth都是新手,所以完全有可能在下面的代码中犯了一些愚蠢的错误。我相信这是所有需要找到一个解决问题的办法,但如果你需要更多的信息,我会仔细检查这篇文章 谢谢Servlets Twitter OAuth“无法验证签名和令牌。”,servlets,twitter,oauth,scribe,Servlets,Twitter,Oauth,Scribe,我很难从Twitter API获得响应。我在这里使用scribe 1.3.5。当从一个页面调用TwitterLoginServlet时,它成功地将我重定向到twitter并允许我登录。但是,在回调上,TwitterCallbackServlet在oAuthResponse中接收以下信息 代码-401 消息-未经授权 正文-验证oauth签名和令牌失败 我对使用servlet和oauth都是新手,所以完全有可能在下面的代码中犯了一些愚蠢的错误。我相信这是所有需要找到一个解决问题的办法,但如果你需要
public class TwitterServlet extends HttpServlet {
private static final String SESSION_NAME_REQUEST_TOKN = "twitter.requestToken";
protected Token getRequestToken(HttpServletRequest req) {
HttpSession session = req.getSession();
try {
return (Token) session.getAttribute(SESSION_NAME_REQUEST_TOKN);
}
finally {
session.removeAttribute(SESSION_NAME_REQUEST_TOKN);
}
}
protected void setRequestToken(HttpServletRequest req, Token token) {
HttpSession session = req.getSession();
session.setAttribute(SESSION_NAME_REQUEST_TOKN, token);
}
protected OAuthRequest createRequest() {
OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.twitter.com/oauth/request_token");
return request;
}
}
public class TwitterLoginServlet extends TwitterServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String callback = "http://" + request.getServerName() + ":" + request.getServerPort() + "/******/TwitterCallbackServlet";
OAuthService service = new ServiceBuilder().provider(TwitterApi.SSL.class)
.apiKey("******")
.apiSecret("******")
.callback(callback)
.build();
Token requestToken = service.getRequestToken();
setRequestToken(request, requestToken);
response.sendRedirect(service.getAuthorizationUrl(requestToken));
return;
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
public class TwitterCallbackServlet extends TwitterServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
OAuthService service = new ServiceBuilder().provider(TwitterApi.SSL.class)
.apiKey("******")
.apiSecret("******")
.build();
Token requestToken = getRequestToken(request);
// TODO: Check if the requestToken matches the token of this request.
String verifier = request.getParameter(OAuthConstants.VERIFIER);
Token accessToken = service.getAccessToken(requestToken, new Verifier(verifier));
OAuthRequest oAuthRequest = createRequest();
service.signRequest(accessToken, oAuthRequest);
Response oAuthResponse = oAuthRequest.send();
String body = oAuthResponse.getBody();
response.sendRedirect("/******/accountSettings.xhtml");
}
为什么在获取访问令牌后再次点击requestToken端点?尝试访问其他资源,例如:
https://api.twitter.com/1.1/account/verify_credentials.json;
注意,您可以运行just来检查东西是否正常工作