2017-04-23 8 views
1

C'est le problème lorsque j'essaie de recevoir un jeton d'accès de github.Apache Oltu unsupported_response_type

OAuthProblemException{error='unsupported_response_type', description='Invalid response! Response body is not application/json encoded', uri='null', state='null', scope='null', redirectUri='null', responseStatus=0, parameters={}}

Je veux garder aussi général que possible, donc je ne veux pas utiliser la classe GithubTokenResponse. Quelles options me reste-t-il pour éviter l'exception?

  OAuthClient oAuthClient = new OAuthClient(new URLConnectionClient()); 
      OAuthClientRequest request = OAuthClientRequest 
        .tokenLocation("https://github.com/login/oauth/access_token") 
        .setCode(code) 
        .setGrantType(GrantType.AUTHORIZATION_CODE) 
        .setClientId(id) 
        .setClientSecret(secret) 
        .buildQueryMessage(); 

      OAuthAccessTokenResponse tk = oAuthClient.accessToken(request); //this causes the problem 

solution "Ugly":

GitHubTokenResponse tk = oAuthClient.accessToken(request, GitHubTokenResponse.class); 

Répondre

1

Il fonctionne également avec OAuthJSONAccessTokenResponse. Voici le code suivant ce que j'essaie et ça fonctionne bien.

OAuthClient client = new OAuthClient(new URLConnectionClient()); 

      OAuthClientRequest request = 
        OAuthClientRequest.tokenLocation(TOKEN_REQUEST_URL) 
        .setGrantType(GrantType.CLIENT_CREDENTIALS) 
        .setClientId(CLIENT_ID) 
        .setClientSecret(CLIENT_SECRET) 
        // .setScope() here if you want to set the token scope 
        .buildQueryMessage(); 
      request.addHeader("Accept", "application/json"); 
      request.addHeader("Content-Type", "application/json"); 
      request.addHeader("Authorization", base64EncodedBasicAuthentication()); 

      String token = client.accessToken(request, OAuth.HttpMethod.POST, OAuthJSONAccessTokenResponse.class).getAccessToken(); 

Je pense que nous devons définir le type de contenu dans l'en-tête. Ces deux lignes qui règlent le problème.

request.addHeader("Accept", "application/json"); 
request.addHeader("Content-Type", "application/json"); 

Espérons cette aide.