Мобильная аутентификация с использованием JWT - PullRequest
1 голос
/ 13 апреля 2020

Мне нужно аутентифицировать пользователей мобильного приложения, которое взаимодействует с API-интерфейсом REST.

После некоторых исследований я нашел 2 способа:

  1. Аутентификация на основе Firebase (Нет, потому что я У меня есть своя база данных)
  2. Использование JWT

Поэтому у меня есть вопросы по поводу JWT:

Если я использую соединение HTTPS, может кто-нибудь украсть токен? (например, нет человека посередине)

API должен отправлять новый токен для каждого запроса? (Таким образом, я могу сократить время жизни токен?).

Чтобы избежать повторного подключения пользователя, мне необходимо использовать токен refre sh, это может быть другой JWT?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Поскольку вы используете свою собственную базу данных, именно поэтому 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();
    }
 }
}
0 голосов
/ 13 апреля 2020
  1. Зависит от того, что если вы храните его в локальном хранилище или в хранилище сессии, его можно украсть с помощью атаки xss. Если вы храните только на защищенном http * поваре ie, это сложнее. но невозможно украсть его из запроса при использовании https.
  2. Нет, есть срок действия токена, например, 1 час, 1 день и т. д. 1012 * ...
  3. да. это должен быть другой токен, он называется refre sh token, подробнее об этом можно прочитать здесь: https://auth0.com/blog/refresh-tokens-what-are-they-and-when-to-use-them/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...