我正在编写一个web应用程序,刚刚实现了用户可以使用spring-social-(core/twitter)通过Twitter登录。通过Twitter登录OAuth不记得授权
但是,Twitter的行为奇怪。在初始身份验证/授权后,每次我将用户发送给Twitter进行身份验证时,Twitter都会提示再次授权我的应用程序。我查看了连接的Twitter个人资料。我的应用程序在那里,并正确授权(在我的情况下阅读访问)。
我没有请求额外权限的情况。我的所有应用程序需求都是读取权限(授权对话框确认这一点)。
我使用OAuth1Operations
(由TwitterConnectionFactory
返回)执行OAuth舞蹈并将生成的连接保存到数据库中。我的前端是用Wicket 1.5编写的。
我可以通过一次又一次重新授权我的应用程序来解决此问题,当我想通过Twitter登录时,但这是一个很大的麻烦。任何人都知道我在这里错过了什么?
这里是我的代码:
TwitterConnectionFactory connectionFactory = (TwitterConnectionFactory) connectionFactoryLocator.getConnectionFactory(Twitter.class);
String callbackUrl = [...];
if (pageParameters.get("oauth_token").isNull() || pageParameters.get("oauth_verifier").isNull()) {
MultiValueMap<String, String> params = new LinkedMultiValueMap<String, String>();
params.add("x_auth_access_type", "read");
OAuthToken token = connectionFactory.getOAuthOperations().fetchRequestToken(callbackUrl, params);
String url = connectionFactory.getOAuthOperations().buildAuthorizeUrl(token.getValue(), OAuth1Parameters.NONE);
getSession().setAttribute("twitter_token", token);
setResponsePage(new RedirectPage(url));
} else {
String token = pageParameters.get("oauth_token").toString();
String verifier = pageParameters.get("oauth_verifier").toString();
OAuthToken previousToken = (OAuthToken) getSession().getAttribute("twitter_token");
if (previousToken.getValue().equals(token)) {
AuthorizedRequestToken authorizedRequestToken = new AuthorizedRequestToken(previousToken, verifier);
OAuthToken accessToken = connectionFactory.getOAuthOperations().exchangeForAccessToken(authorizedRequestToken, null);
Connection<Twitter> connection = connectionFactory.createConnection(accessToken);
}
}
我得到了同样的问题,但我已经调用'authenticate'而不是'authorize' :( –
@Deejay:你可以发布你的代码吗?也许你遇到过其他问题... – r3nj1
我想它出去了 - Twitter在去年更改了他们的API,所以你必须勾选他们的应用程序设置页面上的一个复选框,以允许OAuth连接用于认证。 –