我应该如何在 android 中使用 JWT?
Posted
技术标签:
【中文标题】我应该如何在 android 中使用 JWT?【英文标题】:how should i use JWT in android? 【发布时间】:2020-07-21 21:01:40 【问题描述】:我想使用jjwt
创建登录活动。
所以我不知道如何使用它。我在https://github.com/jwtk/jjwt 上读过它,但我听不懂,因为我的英语不流利。我想让你给我一个例子来理解它。我应该送任何东西去服务吗?或者我应该用 sqlite openhelper
将密钥保存在我的 DatabaseHelper
中。
我使用OkHttp
将用户名和密码发送到服务并使用json
获取它。
这是我的活动:
主活动:
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void btnSignin_Clicked(View view)
String username=((EditText)findViewById(R.id.txtUsername)).getText().toString();
String password=((EditText)findViewById(R.id.txtPassword)).getText().toString();
new SigninTask().execute(username,password);
public void btnSignup_Clicked(View view)
((EditText)findViewById(R.id.txtUsername)).setText("");
((EditText)findViewById(R.id.txtPassword)).setText("");
String username=((EditText)findViewById(R.id.txtUsername)).getText().toString();
String password=((EditText)findViewById(R.id.txtPassword)).getText().toString();
new SignupTask().execute(username,password);
private class SignupTask extends AsyncTask<String,Object,String>
@Override
protected String doInBackground(String... strings)
try
return
new OkHttpClient()
.newCall(
new Request.Builder()
.url("http://localhost:8080/Service/signup?username="+strings[0]+"&password="+strings[1])
.build()
)
.execute()
.body()
.string();
catch (Exception e)
return null;
@Override
protected void onPostExecute(String s)
SimpleDialog dialog=new SimpleDialog();
dialog.setContext(MainActivity.this);
dialog.setTitle("Error");
try
JSONObject jsonObject=new JSONObject(s);
Boolean result=jsonObject.getBoolean("value");
if (result)
String username= ((EditText)findViewById(R.id.txtUsername)).getText().toString();
dialog.setMessage("Signup completed)");
((EditText)findViewById(R.id.txtUsername)).setText("");
((EditText)findViewById(R.id.txtPassword)).setText("");
else
((EditText)findViewById(R.id.txtUsername)).setText("");
((EditText)findViewById(R.id.txtPassword)).setText("");
dialog.setMessage("Sign up failed !");
catch (Exception e)
dialog.setMessage("Error occured !");
dialog.show(getSupportFragmentManager(),"dialog");
private class SigninTask extends AsyncTask<String,Object,String>
@Override
protected String doInBackground(String... strings)
try
return new OkHttpClient()
.newCall(
new Request.Builder()
.url("http://localhost:8080/Service/authorize?username="+strings[0]+"&password="+strings[1])
.build()
)
.execute()
.body()
.string();
catch (Exception e)
return null;
@Override
protected void onPostExecute(String s)
SimpleDialog dialog=new SimpleDialog();
dialog.setContext(MainActivity.this);
dialog.setTitle("Error");
try
JSONObject jsonObject=new JSONObject(s);
Boolean result=jsonObject.getBoolean("value");
if (result)
String username=((EditText)findViewById(R.id.txtUsername)).getText().toString();
String password=((EditText)findViewById(R.id.txtPassword)).getText().toString();
Intent intent=new Intent(MainActivity.this,CategoryActivity.class);
User user=new User();
user.setUsername(username);
user.setPassword(password);
intent.putExtra("user",user);
startActivity(intent);
finish();
else
dialog.setMessage("Invalid username or password !");
catch (Exception e)
dialog.setMessage("Error occured !");
dialog.show(getSupportFragmentManager(),"dialog");
【问题讨论】:
【参考方案1】:通常,您将登录数据(用户名、密码)发送到对您进行身份验证的服务器,然后该服务器发回 JWT。您可以将此令牌存储在您的应用程序中。然后在每个请求中将此令牌发送到服务器以对您进行身份验证。
【讨论】:
你告诉服务器发回一个 JWT 。但在 github (jjwt) 中适用于 android studio?我使用 netbeans ide 制作服务器。我应该在 netbeans 或 android studio 中使用 JWT。 @TymurPysarevych @Mohammad,客户端(应用程序)将凭据发送到对客户端进行身份验证的服务器。成功验证后,您会在客户端收到 JWT。然后,您只需在每个请求中的 HTTP 标头中发送此令牌,您就可以开始了。以上是关于我应该如何在 android 中使用 JWT?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring security 和 JwtBuilder 中处理 JWT 过期(我应该使用 cookie max age)
我应该/如何将我的 JWT 令牌存储在 redis 中以便我可以看到当前的用户会话?