在客户端应用程序(java)上安全地存储jwt

qmelpv7a  于 2021-08-20  发布在  Java
关注(0)|答案(0)|浏览(191)

我已经使用node.js express编写了一个rest api。用户和密码存储在mysql表中,当您登录时,如果密码和用户名匹配,它将生成一个jwt。当执行任何重要操作(例如在数据库中插入/删除/更新数据)时,通过api检查/验证此jwt
在客户端,现在我想安全地存储生成的jwt,并在需要时将其传递给http请求。客户端是用java/javafx编写的,并使用mvc模式。我现在这样做的方式是(当用户登录时,我将jwt作为字符串存储在名为token的类中):

public class LoginService {

private final OkHttpClient client = new OkHttpClient();

public static Token userToken;

int responseCode;

Gson gson = new Gson();

protected Task<Integer> login(LoginModel loginModel) throws IOException {
    return new Task<>() {
        @Override
        protected Integer call() {
            DDatabase.getScene().setCursor(Cursor.WAIT);
            RequestBody formBody = new FormBody.Builder()
                    .add("username", loginModel.getUsername())
                    .add("password", loginModel.getPassword())
                    .build();
            Request request = new Request.Builder()
                    .url("http://localhost:3000/api/users/login")
                    .post(formBody)
                    .build();
            try (Response response = client.newCall(request).execute()) {
                System.out.println(response.code());
                responseCode = response.code();
                String responseToken= response.body().string();
                userToken = (Token) gson.fromJson(responseToken, Token.class);
                System.out.println(userToken.getToken());
                DDatabase.getScene().setCursor(Cursor.DEFAULT);
            } catch (IOException e) {
                e.printStackTrace();
                DDatabase.getScene().setCursor(Cursor.DEFAULT);
            }
            return responseCode;
        }
    };
}}

令牌类:

public class Token {

private final String token;

public Token(String token) {
    this.token = token;
}

public String getToken() {
    return token;
}}

我现在的问题是:还有什么其他方法可以存储这个令牌,并且只有在我需要将它添加到http请求时才能访问它?我现在这样做是可行的,但我很确定这不是最安全的。
提前感谢您抽出时间!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题