I've read through this explanation of refresh tokens here: https://stackoverflow.com/a/36280559/11634814 and I think it makes a lot of sense. In a nutshell, refresh tokens are useful because you only have one unexpired access token associated with each refresh token at a time. If Bob has stolen Alice's refresh token, we can detect this because he'll try and use it to make a new request with Alice's token, even though Alice's access token is not expired.
Trying to make a request with a refresh token when the corresponding access token is not expired is odd, and the server can detect this and invalidate the refresh token. My question then is very similar to this question asked in the comments by @Rakib:
"Does the server has to maintain a state for refresh token to find the anomaly? If yes then using a refresh token is not stateless implementation. Is that a current assumption?"
Does this implementation mean that you would have to store the current access tokens that are associated with a single refresh token? Or is there a stateless way to go about it?
Thanks