Fix check on expiration time
Fix check on expiration time

This patch addresses the following issues:

- the "expires_in" attribute is optional, so we should check the
  expiration time only if that attribute is present.

- "expires_in" is not an absolute time; we must store the timestamp of
  when we received the response, and take that into account when we
  compare the expiry time with the current time.

- When we reuse the stored token, we must update the "expires_in" value,
  taking into account the time already elapsed.

plotters/accounts-sso.signon-plugin-oauth2,plotters/accounts-sso.signon-plugin-oauth2