title: How do you refresh an authentication token with Authlib and GSpread?
body: <p>I'm using gspread in a python app to access some backend Google Sheets that act as a database for the application. The user is required to log into the app using an in app browser and an authlib OAuth2 session is created using the token returned in the url via this method. The initial log in and access works fine, but when the token times out after an hour I access the sheets anymore and the app breaks. </p>
  
  <p>I can't work out how to refresh the token using authlib, the reason we picked the library is because it integrated with gspread and the it was supposed to autorefresh auth tokens for you. The code that I use for login is below but after an hour the gspread function <code>open_by_key()</code> fails because of the authentication problem. </p>
  
  <p>I have tried recreating the gspread client, but that just uses the same token. I feel like there should be a way to refresh the token to extend its life for another hour but I can't find how to do that with authlib.</p>
  
  <pre><code>creds = OAuth2Session(clientId, clientSecret, scope=scope, redirect_uri=redirectUrl)
  authUrl, state = creds.create_authorization_url('https://accounts.google.com/o/oauth2/v2/auth', response_type='token')
  </code></pre>
  
  <p>Load the <code>authURL</code> in the browser and get user to log in. Browser returns the authentication response as <code>urlString</code></p>
  
  <pre><code>creds.fetch_access_token(authorization_response=urlString)
  
  gc = gspread.Client(None, creds)
  ss = gc.open_by_key(sheetKey)
  todaysSheetName = datetime.datetime.now().strftime('%d-%m-%Y')
  wks = ss.worksheet(todaysSheetName)
  </code></pre>