ID token expires after only 15 minutes

It’s no different than if a session expires while the user is browsing a page. You wouldn’t suddenly force the user to go through the OAuth flow, you’d wait until they performed an action (ie, navigating to a new page, or submitting the form).

You can use the state param to store user-state so even if the user was attempting to access domain.com/some/path, you can store where they were going in the state so that after they get redirected back to you, your server can then look at the state param and send them to domain.com/some/path so they end up exactly where they wanted to go. To the user all that will happen is that it will appear as if the loading took a second longer, as they were redirected to Twitch then instantly back to your site (unless they disconnected from your app).

The point of this is so that if a user logs into your site using Twitch, then can’t then disconnect from your app and still keep using your site for a long period of time, still logged in, despite having disconnected and so should not be logged in.

Also worth noting is the docs on this subject:

Going through the auth flow is just one way to revalidate btw, it’s one of the common reasons why many sites that use Twitch to login have short lived sessions (between 15 and 30 minutes) as it’s an easy way to revalidate the users connection. Alternatively you could periodically poll the validation endpoint while the user is logged in.