Java 通过Twitter OAuth登录不会';我不记得授权了

Java 通过Twitter OAuth登录不会';我不记得授权了,java,oauth,twitter-oauth,spring-social,Java,Oauth,Twitter Oauth,Spring Social,我正在编写一个web应用程序,并且刚刚实现了一个用户可以通过Twitter登录,使用SpringSocial-(core/Twitter) 然而,Twitter的行为却很奇怪。在初始身份验证/授权之后,每次我将用户发送到Twitter进行身份验证时,Twitter都会提示再次授权我的应用程序。我已经查看了已连接的Twitter个人资料。我的应用程序已存在并已正确授权(在我的情况下为读取访问) 我没有请求额外权限的案例。我的应用程序只需要读取访问权限(授权对话框确认了这一点) 我正在使用OAuth

我正在编写一个web应用程序,并且刚刚实现了一个用户可以通过Twitter登录,使用SpringSocial-(core/Twitter)

然而,Twitter的行为却很奇怪。在初始身份验证/授权之后,每次我将用户发送到Twitter进行身份验证时,Twitter都会提示再次授权我的应用程序。我已经查看了已连接的Twitter个人资料。我的应用程序已存在并已正确授权(在我的情况下为读取访问)

我没有请求额外权限的案例。我的应用程序只需要读取访问权限(授权对话框确认了这一点)

我正在使用
OAuth1操作
(由
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);
    }
}
TwitterConnectionFactory connectionFactory=(TwitterConnectionFactory)connectionFactoryLocator.getConnectionFactory(Twitter.class);
字符串callbackUrl=[…];
if(pageParameters.get(“oauth_令牌”).isNull()| | pageParameters.get(“oauth_校验器”).isNull()){
多值映射参数=新的LinkedMultiValueMap();
参数add(“x_auth_access_type”、“read”);
OAuthToken token=connectionFactory.getOAuthOperations().fetchRequestToken(回调URL,参数);
字符串url=connectionFactory.GetOAuthoOperations().buildAuthorizeUrl(token.getValue(),OAuth1Parameters.NONE);
getSession().setAttribute(“twitter_令牌”,令牌);
setResponsePage(新重定向页面(url));
}否则{
String token=pageParameters.get(“oauth_token”).toString();
字符串验证器=pageParameters.get(“oauth_验证器”).toString();
OAuthToken previousToken=(OAuthToken)getSession().getAttribute(“twitter_令牌”);
if(previousToken.getValue().equals(token)){
AuthorizedRequestToken AuthorizedRequestToken=新的AuthorizedRequestToken(previousToken,验证者);
OAuthToken accessToken=connectionFactory.getOAuthOperations().exchangeForAccessToken(authorizedRequestToken,null);
连接=connectionFactory.createConnection(accessToken);
}
}

我找到了解决方案!这里也有详细说明:

问题是我每次都特别要求Twitter授权我的应用程序。替换:

String url = connectionFactory.getOAuthOperations().buildAuthorizeUrl(token.getValue(), OAuth1Parameters.NONE);

解决问题!
调用URL进行身份验证只会在应用程序尚未获得授权的情况下请求授权。

我遇到了同样的问题,但我已经调用了
身份验证
,而不是
授权
:(@Deejay:你能发布你的代码吗?也许你遇到了另一个问题…我发现了-Twitter在去年更改了API,所以你必须在他们的应用程序设置页面上勾选一个复选框,以便允许OAuth连接用于身份验证。@Deejay谢谢,这非常有帮助。这是应用程序设置选项卡上的“允许使用此应用程序登录Twitter”复选框。
String url = connectionFactory.getOAuthOperations().buildAuthenticateUrl(token.getValue(), OAuth1Parameters.NONE);