認証を必要とするRESTサービスを実装しています。 [〜#〜] jwt [〜#〜] を使用しています。
Androidアプリは、ログイン時にリクエストを送信し、トークンを取得し、後続のリクエストごとにヘッダーでトークンを送信する必要があります。
私の質問は、トークンを保存する方法、またはどこに保存する必要があるかです。
それを行うためのベストプラクティス方法は何でしょうか?それとも私はこれについて全く間違った方法を取っていますか?
私はこのansをここに見つけました( src )
Androidアプリを作成している場合、すべてのアクセストークンをSharedPreferences
に保存する必要があります(これを機能させるために必要なAPIドキュメントは次のとおりです)。 iOS開発者は、アクセストークンをKeychain
に保存することをお勧めします。
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","");
}