我想用Spring oauth2客户端软件包交换授权代码以刷新和访问令牌。我的代码如下:
public static void main(String[] args) {
AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
resource.setUserAuthorizationUri("http://localhost:8080/oauth/authorize");
resource.setAccessTokenUri("http://localhost:8080/oauth/token");
resource.setClientId("my-client-with-secret");
resource.setClientSecret("secret");
AccessTokenRequest request = new DefaultAccessTokenRequest();
request.setAuthorizationCode("o9subu");
AuthorizationCodeAccessTokenProvider provider = new AuthorizationCodeAccessTokenProvider();
OAuth2AccessToken accessToken = provider.obtainAccessToken(resource, request);
System.out.println(accessToken.getValue());
}
提供商来自https://github.com/spring-projects/spring-security-oauth/tree/master/tests/annotation/approval,当我直接致电提供商时,我已从浏览器中获取了temp oauth2代码。
错误信息是
线程中的异常" main" error =" invalid_request",error_description ="检测到可能的CSRF - 状态参数是必需的但是找不到状态" 在org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.getParametersForTokenRequest(AuthorizationCodeAccessTokenProvider.java:255) 在org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.obtainAccessToken(AuthorizationCodeAccessTokenProvider.java:209)
我仍然想要自己请求access_token和secret_token,因为我从另一个系统获取了oauth2代码。
答案 0 :(得分:0)
首先,要获得 refresh_token ,你必须有一个代码才能让你获得它,为此设置“& access_type =离线& approval_prompt =强制“在您发送的网址中以获取代码。 然后,您可以要求 refresh_token 设置此参数
code=your_code_generated
client_id=your_client_id
client_secret=your_client_secret
redirect_uri=https://oauth2.example.com/code
grant_type=authorization_code
POST https://accounts.google.com/o/oauth2/token
您可以在Google身份平台https://developers.google.com/identity/protocols/OAuth2WebServer
中查看更多详细信息答案 1 :(得分:0)
在设置授权码后简单添加此行:
request.setPreservedState(new Object());