Lo habitual es usar un sistema de Access token, es decir, haces un sistema que al logearte te de una cadena de caracteres que identifique al usuario, y que sea válida durante un tiempo (por ejemplo 1 semana o 1 mes), esto se llama Token de Sesión.
Además del Token de Sesión también le envías al usuario un Refresh Token (o Token de Renovación), que se usa para renovar el Token de Sesión cuando este ha caducado.
Por ejemplo, te logeas, y al usuario le envías:
AccessToken = "aaaa"
RefreshToken = "bbbb"
A partir de ese momento para todo el tráfico con el servidor usas el AccessToken en vez del usuario y contraseña, ya que ese AccessToken identifica un login válido.
Cuando el AccessToken caduca vuelves a relogearte, pero en vez de usando el usuario y contraseña usando el AccessToken y el RefreshToken y al usuario le envías:
AccessToken = "cccc"
RefreshToken = "dddd"
Haciendo esto lo único que tienes que tener almacenado en tu app en todo momento es el AccessToken y el RefreshToken.