Since expiresIn is calculated at the moment of AccessToken creation (#107), it remains the same no matter how many times it has been requested. Also, since it is apparently non-negative at the moment of creation, AccessToken#isExpired method will never return true, which renders GrantHandler#shouldRefreshAccessToken and corresponding branch in GrantHandler#issueAccessToken useless.
Wouldn't it be better if expiresIn was recalculated upon each request? Shouldn't the expiration date/time be immutable, not the time until expiration?