web-dev-qa-db-ja.com

JWTトークンはどこに保存しますか?

認証を必要とするRESTサービスを実装しています。 [〜#〜] jwt [〜#〜] を使用しています。

Androidアプリは、ログイン時にリクエストを送信し、トークンを取得し、後続のリクエストごとにヘッダーでトークンを送信する必要があります。

私の質問は、トークンを保存する方法、またはどこに保存する必要があるかです。

  • 共有設定
  • SQLiteデータベース
  • ファイル内

それを行うためのベストプラクティス方法は何でしょうか?それとも私はこれについて全く間違った方法を取っていますか?

24
mbtamuli

私はこのansをここに見つけました( src

Androidアプリを作成している場合、すべてのアクセストークンをSharedPreferencesに保存する必要があります(これを機能させるために必要なAPIドキュメントは次のとおりです)。 iOS開発者は、アクセストークンをKeychainに保存することをお勧めします。

iOSの場合

Androidの場合

14
chandan

RESTサービスを使用していて、JWTを保存したい場合、最善の方法はSharedPreferencesです。セキュリティのためにPrivateModeに保存する必要があります。
SharedPreferenceおよびSharedPreference.Editorは、JWTを格納および取得するために使用されます。 JWTは、ユーザー名とパスワードのPOSTリクエスト後に取得されます

 private void makeJsonRequest() {    
        String json_req = "json_req";
       // String url = getContext().getString(R.string.LOGIN_URL);
            String url="";    
            final JSONObject obj=new JSONObject();
            try{
                obj.put("username",name);
                obj.put("password",pass);

            }catch (JSONException e)
            {
                e.printStackTrace();
            }

        JsonObjectRequest req = new JsonObjectRequest(Request.Method.POST, url, obj,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {                          
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {                
                    }

                }) {          
            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String, String> headers = new HashMap<>();
                return headers;
            }
        };
        AppController.getInstance().addToRequestQueue(req, json_req);  

応答からJWTを取得し、共有設定に保存するには

SharedPreferences prefs;
    SharedPreferences.Editor edit;
 prefs=getActivity().getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
        edit=prefs.edit();
 try {
                         String saveToken=response.getString("token");
                            edit.putString("token",saveToken);
                            Log.i("Login",saveToken);
                              edit.commit();
                        }
                        catch (JSONException e)
                        {
                            e.printStackTrace();
                        }  

SharedPreferenceからトークンを取得するには

private void getToken() {
        prefs=this.getActivity().getSharedPreferences("myPrefs",Context.MODE_PRIVATE);
        String token = prefs.getString("token","");
    }
13
Satya