Поскольку вы используете свою собственную базу данных, именно поэтому JWT является лучшим вариантом для вас.
1- Если я использую соединение HTTPS, может ли кто-нибудь украсть токен?: - Да, они могут украсть токен, возможна mitma, но даже если они будут умерить токен, который ваш сервер узнает, проверив токен и проверив его выдачу (ваш клиент и сервер могут использовать закрытый ключ для шифрования ответ на стороне клиента и расшифровка и проверка его на стороне сервера)
2 - API должен отправлять новый токен для каждого запроса? (Таким образом, я могу сократить время жизни токена?). Да, каждый токен будет отличаться. Токен JWT является зашифрованной формой ваших почтовых данных, а также издателя, темы и других дополнительных данных. Так что, если ваши почтовые данные будут отличаться каждый раз, когда токен будет отличаться.
3 - Чтобы избежать повторного подключения пользователя, мне нужно использовать токен refre sh, это может быть другой JWT ? Другой JWT не требуется.
Вы можете использовать библиотеку Jawa JWT: - Посетите https://github.com/auth0/java-jwt
И используйте этот класс для создания, проверки и декодирования Токены JWT.
public class JWTTokenVerifier {
public String CreateToken(String body) {
String token = "";
try {
Algorithm algorithm = Algorithm.HMAC256(Constants.APP_SECRET);
token = JWT.create()
.withClaim("body", body)
.withIssuer("auth0")
.sign(algorithm);
} catch (JWTCreationException exception) {
//Invalid Signing configuration / Couldn't convert Claims.
exception.printStackTrace();
}
System.out.println("TOKEN IS > " + token);
return token;
}
public void verifyTokenAndDecodeResponse(String token) {
try {
Algorithm algorithm = Algorithm.HMAC256(Constants.APP_SECRET);
JWTVerifier verifier = JWT.require(algorithm)
.build(); //Reusable verifier instance
DecodedJWT jwt = verifier.verify(token);
String payload = jwt.getPayload();
Base64 base64Url = new Base64(true);
payload=new String(base64Url.decode(payload));
System.out.println("payload is " + payload);
} catch (JWTVerificationException exception) {
System.out.printf("Unable to parse token");
exception.printStackTrace();
}
}
}