2017-08-25 2 views
0

Ich möchte den Autorisierungscode für Refresh- und Zugriffstoken mit dem Spring oauth2-Clientpaket austauschen. Mein Code sieht so aus:Spring - oauth2 - Autorisierungscode für Aktualisierungs- und Zugriffstoken austauschen

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()); 
} 

Der Anbieter von https://github.com/spring-projects/spring-security-oauth/tree/master/tests/annotation/approval ist, und ich habe die temp oauth2 Code aus dem Browser genommen, wenn ich die Anbieter direkt angerufen.

und die Fehlermeldung ist

Exception in thread "main" error = "invalid_request", ERROR_DESCRIPTION = "Möglicher CSRF erkannt - Zustandsparameter erforderlich war, aber kein Staat gefunden werden kann" bei org.springframework .security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.getParametersForTokenRequest (AuthorizationCodeAccessTokenProvider.java:255) bei org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.obtainAccessToken (AuthorizationCodeAccessTokenProvider.java:209)

Ich möchte immer noch access_token und secret_token von mir anfordern, weil ich den oauth2-Code von einem anderen System bekomme.

Antwort

0

Zunächst einmal zu bekommen die refresh_token Sie einen Code haben muss, dass Sie es bekommen können, das zu tun, setzen „& access_type = offline & approval_prompt = force“ in der URL, die Sie senden um den Code zu erhalten. Dann können Sie für refresh_token stellen diese Parameter einstellen

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 

Sie ausführlicher in Google Identität Platform https://developers.google.com/identity/protocols/OAuth2WebServer sehen

0

Einfache Fügen Sie diese Zeile nach der eingestellten Autorisierungscode:

request.setPreservedState(new Object()); 
Verwandte Themen