私のサーバはFlaskベース、クライアントはアンドロイドスタジオ、私はretrofitを使った通信です。レトロフィットからJWTトークンでレストサーバへ
問題は、私はログイン後、サーバーにアンドロイドから正しくJWTトークンを渡すことができないんだということである
郵便配達で、それは良い取り組んでいます: {{URL}}/AUTH - 私は。ユーザーとしてログインし、JWTトークンを取得します。 後で、値 "JWT {{jwt_token}}"と {{url}}/users/johnの "Authorization"ヘッダーを追加しています - 問題なく受信されたユーザー情報を求めています。
アンドロイドスタジオからエンドポイント:
public interface RunnerUserEndPoints {
// @Headers("Authorization")
@GET("https://stackoverflow.com/users/{user}")
Call<RunnerUser> getUser(@Header("Authorization") String authHeader, @Path("user") String user);
コール自体(access_tokenはを送信する前に正しいです!):
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) { ....
サーバーからの応答エラーログ:
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 -
My 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;
}
}
実際、私は本当に固執しています。改造のウェブサイトですべてのチュートリアルに沿って成功することなく試してみました。 シンプルな解決策があると確信しています。郵便配達員のように、値 "JWT" + access_tokenを持つ "Authorization"ヘッダーを追加するだけです。ありがとう。
EDIT: 問題は、クライアントのaccess_tokenのビルドでした。 私はしました: JsonElement ans = response.body()。get( "access_token"); access_token = "JWT" + ans.toString(); 私はどちらをすべきか: JsonElement ans = response.body()。get( "access_token"); access_token = "JWT" + ans.getAsString();だから、
それは「JWT 『EYを送っ前に...』」(ダブル「」) そして今、それは
私は本当に立ち往生しています。私は昨日と今日一日中努力しています.... 別の実装のためのオファーがあれば、私は自分の時間を投資することができますが、それを働かせなければなりません – JohnSnowTheDeveloper