mon serveur est basé sur Flask, mon client est un studio android, et je suis en communication utilisant retrofit.Authentification de Retrofit avec jeton JWT au serveur de repos
Le problème est que je ne suis pas en mesure de passer le JWT jeton correctement de l'androïde au serveur après la connexion
Avec postier, il travaille bien: {{url}}/auth - je. m se connecter en tant qu'utilisateur et obtenir le jeton JWT. Plus tard j'ajoute l'en-tête "Autorisation", avec la valeur "JWT {{jwt_token}}" et {{url}}/users/john - Je demande des informations d'utilisateur, qui est reçu sans problèmes.
Le point final du studio android:
public interface RunnerUserEndPoints {
// @Headers("Authorization")
@GET("https://stackoverflow.com/users/{user}")
Call<RunnerUser> getUser(@Header("Authorization") String authHeader, @Path("user") String user);
L'appel lui-même (Le access_token est correct avant de l'envoyer!):
final RunnerUserEndPoints apiService = APIClient.getClient().create(RunnerUserEndPoints.class);
Log.i("ACCESS","Going to send get request with access token: " + access_token);
Call<RunnerUser> call = apiService.getUser("JWT" + access_token, username);
Log.i("DEBUG","Got call at loadData");
call.enqueue(new Callback<RunnerUser>() {
@Override
public void onResponse(Call<RunnerUser> call, Response<RunnerUser> response) { ....
Le journal des erreurs de réponse du serveur:
File "C:\Users\Yonatan Bitton\RestfulEnv\lib\site-packages\flask_restful\__init__.py", line 595, in dispatch_request
resp = meth(*args, **kwargs)
File "C:\Users\Yonatan Bitton\RestfulEnv\lib\site-packages\flask_jwt\__init__.py", line 176, in decorator
_jwt_required(realm or current_app.config['JWT_DEFAULT_REALM'])
File "C:\Users\Yonatan Bitton\RestfulEnv\lib\site-packages\flask_jwt\__init__.py", line 151, in _jwt_required
token = _jwt.request_callback()
File "C:\Users\Yonatan Bitton\RestfulEnv\lib\site-packages\flask_jwt\__init__.py", line 104, in _default_request_handler
raise JWTError('Invalid JWT header', 'Unsupported authorization type')
flask_jwt.JWTError: Invalid JWT header. Unsupported authorization type
10.0.0.6 - - [30/Sep/2017 01:46:11] "GET /users/john HTTP/1.1" 500 -
Mon api-client
public class APIClient {
public static final String BASE_URL = "http://10.0.0.2:8000";
private static Retrofit retrofit = null;
public static Retrofit getClient(){
if (retrofit==null){
retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
Log.i("DEBUG APIClient","CREATED CLIENT");
return retrofit;
}
}
En fait, je suis vraiment coincé. Je ai essayé de suivre tous les tutoriels sur le site Web de rénovation sans succès. Je suis sûr qu'il y a une solution simple, j'ai juste besoin d'ajouter "Authorization" Header avec la valeur "JWT" + access_token comme cela fonctionne dans le facteur et c'est tout! Merci.
EDIT: Le problème était la construction du access_token dans mon client. J'ai fait: JsonElement ans = response.body(). Get ("access_token"); access_token = "JWT" + ans.toString(); Ce que j'aurais dû faire: JsonElement ans = response.body(). Get ("access_token"); access_token = "JWT" + ans.getAsString();
Alors avant de l'envoyer « JWT « ey ... » » (Double « ») Et il envoie maintenant « JWT ey ... »
Je suis vraiment coincé, j'ai essayé hier et aujourd'hui toute la journée .... Si vous avez une offre pour une autre mise en œuvre, je peux investir mon temps est-il, mais je dois le faire fonctionner – JohnSnowTheDeveloper