react-oidc-context icon indicating copy to clipboard operation
react-oidc-context copied to clipboard

automaticSilentRenew with stored data creates two Auth instances

Open creage opened this issue 2 years ago • 6 comments

Here is the scenario:

  • User authorizes once, the data gets stored in session storage.
  • Without closing the browser, user reloads the application.

Now, since the automaticSilentRenew is true by default, the OIDC will try to renew the token automatically. The problem is that it tries to do that TWICE, for some odd reason.

And both of the times, it sends same payload. So, the first request passes, but second one always fails, since the refresh token is obsolete now.

But, disabling the automaticSilentRenew and doing it manually works just fine:

// disable default auto-renew in config
automaticSilentRenew: false


// then down in the child component

const auth = useAuth();

useEffect(() => {
    // make renew manually
    return auth.events.addAccessTokenExpiring(() => {
	auth.signinSilent();
    });
}, [auth]);

This way only one refresh request gets called per application.

This issue doesn't appear if user closes the browser (session storage gets destroyed), and reopens it.

creage avatar May 26 '22 11:05 creage

Does not happen in my application. Please enable debug log and verify where the problem comes from.

Logging: https://authts.github.io/oidc-client-ts/#logging

pamapa avatar May 29 '22 15:05 pamapa

@pamapa Will check, thanks.

P.S. Could it be because of React 18 having Strict mode on in development? I see this change hitting a lot of people these days :)

creage avatar May 29 '22 15:05 creage

P.S. Could it be because of React 18 having Strict mode on in development? I see this change hitting a lot of people these days :)

Maybe. I just saw this MR https://github.com/auth0/auth0-react/pull/355, i guess we need the same, could that be your problem?

pamapa avatar May 29 '22 15:05 pamapa

Hi @creage , I've try your solution. I see your note

// then down in the child component

What does it mean? Where exactly we should put the listener?

I've tried this one:

function useSilentAuth() {
  const auth = useAuth();

  useEffect(() => {
    return auth.events.addAccessTokenExpiring(() => {
      auth.signinSilent();
    });
  }, [auth.events]);
}

function App() {
  const auth = useAuth();

  useSilentAuth();

  if (auth.isLoading) return <div>Loading...</div>;

  if (auth.isAuthenticated && auth.error) return <div>Error...</div>;

  if (!auth.isAuthenticated) return <div>Not login</div>;

  return <div>already loggedin</div>;
}

But the problem is, the whole page get re-mount when the auth.signinSilent() triggered. But, if I only use automaticSilentRenew: true, no re-mount occured. But sometimes its trigger the renew twice thus will lead failed to renew the token.

What could be wrong in my setup?

env (using strictmode): "react": "17.0.2" "react-oidc-context": "^2.1.0"

ahmadichsan avatar Aug 01 '22 02:08 ahmadichsan

Can confirm, happens for us using React 17. On a new page, silent renew is singular. After refreshing, it's duplicated.

New page:

oidc-client-ts.js:48 [UserManager] startSilentRenew: begin
oidc-client-ts.js:48 [SilentRenewService] start: begin
oidc-client-ts.js:48 [UserManager] getUser: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx:xxx'): begin
oidc-client-ts.js:48 [UserManager] startSilentRenew: begin
oidc-client-ts.js:48 [SilentRenewService] start: begin
oidc-client-ts.js:48 [UserManager] getUser: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx:xxx'): begin
oidc-client-ts.js:48 [OidcClient] readSigninResponseState: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('xxx'): begin
2oidc-client-ts.js:48 [UserManager] _loadUser: no user storageString
oidc-client-ts.js:48 [SigninState.fromStorageString] begin
2oidc-client-ts.js:53 [UserManager] getUser: user not found in storage
oidc-client-ts.js:48 [UserManager] signinRedirectCallback: begin
oidc-client-ts.js:48 [UserManager] _signinEnd: begin
oidc-client-ts.js:48 [OidcClient] processSigninResponse: begin
oidc-client-ts.js:48 [OidcClient] readSigninResponseState: begin
oidc-client-ts.js:48 [WebStorageStateStore] remove('xxx'): begin
oidc-client-ts.js:48 [SigninState.fromStorageString] begin
oidc-client-ts.js:48 [OidcClient] processSigninResponse: received state from storage; validating response
oidc-client-ts.js:48 [ResponseValidator] validateSigninResponse: begin
oidc-client-ts.js:48 [ResponseValidator] _processSigninState: begin
oidc-client-ts.js:48 [ResponseValidator] _processSigninState: state validated
oidc-client-ts.js:48 [ResponseValidator] validateSigninResponse: state processed
oidc-client-ts.js:48 [ResponseValidator] _processCode: begin
oidc-client-ts.js:48 [ResponseValidator] _processCode: Validating code
oidc-client-ts.js:48 [TokenClient] exchangeCode: begin
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('token_endpoint'): begin
oidc-client-ts.js:48 [MetadataService] getMetadata: begin
oidc-client-ts.js:48 [MetadataService] getMetadata: getting metadata from http://localhost:8180/realms/xxx/.well-known/openid-configuration
oidc-client-ts.js:48 [JsonService] getJson: begin
oidc-client-ts.js:48 [JsonService] getJson: url: http://localhost:8180/realms/xxx/.well-known/openid-configuration
oidc-client-ts.js:48 [JsonService] getJson: HTTP response received, status 200
oidc-client-ts.js:48 [MetadataService] getMetadata: merging remote JSON with seed metadata
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('token_endpoint'): resolved
oidc-client-ts.js:48 [TokenClient] exchangeCode: got token endpoint
oidc-client-ts.js:48 [JsonService] postForm: begin
oidc-client-ts.js:48 [JsonService] postForm: url: http://localhost:8180/realms/xxx/protocol/openid-connect/token
oidc-client-ts.js:48 [JsonService] postForm: HTTP response received, status 200
oidc-client-ts.js:48 [TokenClient] exchangeCode: got response
oidc-client-ts.js:48 [ResponseValidator] validateSigninResponse: code processed
oidc-client-ts.js:48 [ResponseValidator] _validateIdTokenAttributes: begin
oidc-client-ts.js:48 [ResponseValidator] _validateIdTokenAttributes: decoding ID Token JWT
oidc-client-ts.js:48 [ResponseValidator] validateSigninResponse: tokens validated
oidc-client-ts.js:48 [ResponseValidator] _processClaims: begin
oidc-client-ts.js:48 [ResponseValidator] _processClaims: loading user info
oidc-client-ts.js:48 [UserInfoService] getClaims: begin
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('userinfo_endpoint'): begin
oidc-client-ts.js:48 [MetadataService] getMetadata: begin
oidc-client-ts.js:48 [MetadataService] getMetadata: using cached values
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('userinfo_endpoint'): resolved
oidc-client-ts.js:48 [UserInfoService] getClaims: got userinfo url http://localhost:8180/realms/xxx/protocol/openid-connect/userinfo
oidc-client-ts.js:48 [JsonService] getJson: begin
oidc-client-ts.js:48 [JsonService] getJson: token passed, setting Authorization header
oidc-client-ts.js:48 [JsonService] getJson: url: http://localhost:8180/realms/xxx/protocol/openid-connect/userinfo
oidc-client-ts.js:48 [JsonService] getJson: HTTP response received, status 200
oidc-client-ts.js:48 [UserInfoService] getClaims: got claims {xxx}
oidc-client-ts.js:48 [ResponseValidator] _processClaims: user info claims received from user info endpoint
oidc-client-ts.js:48 [ResponseValidator] _processClaims: user info claims received, updated profile: {xxx}
oidc-client-ts.js:48 [ResponseValidator] validateSigninResponse: claims processed
oidc-client-ts.js:48 [UserManager] _signinEnd: got signin response
oidc-client-ts.js:48 [UserManager] storeUser: begin
oidc-client-ts.js:48 [UserManager] storeUser: storing user
oidc-client-ts.js:48 [User] toStorageString: begin
oidc-client-ts.js:48 [WebStorageStateStore] set('user:http://localhost:8180/realms/xxx:xxx'): begin
oidc-client-ts.js:48 [UserManager] _signinEnd: user stored
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 60
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 30 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: using duration 30
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 61 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: using duration 61
oidc-client-ts.js:48 [Event('User loaded')] raise: User {xxx}
oidc-client-ts.js:53 [UserManager] signinRedirectCallback: success, signed in subject acfb7f0d-1395-4d1b-9fee-d2b9630b66af
ConfiguredAuthProvider.tsx:61 post-signin User {xxx}
oidc-client-ts.js:48 [UserManager] getUser: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx:xxx'): begin
oidc-client-ts.js:48 [UserManager] _loadUser: user storageString loaded
oidc-client-ts.js:48 [User.fromStorageString] begin
oidc-client-ts.js:53 [UserManager] getUser: user loaded
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 60
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 30 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: skipping since already initialized for expiration at 1660524493
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 61 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: skipping since already initialized for expiration at 1660524524
ParentSize.js:69 [Violation] 'requestAnimationFrame' handler took 119ms
[Violation] Forced reflow while executing JavaScript took 31ms
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 25
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 56
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 20
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 51
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 15
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 46

(note the timer at the end proceeding as normal)

Refreshed page:

oidc-client-ts.js:48 [UserManager] startSilentRenew: begin
oidc-client-ts.js:48 [SilentRenewService] start: begin
oidc-client-ts.js:48 [UserManager] getUser: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManager] startSilentRenew: begin
oidc-client-ts.js:48 [SilentRenewService] start: begin
oidc-client-ts.js:48 [UserManager] getUser: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManager] getUser: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManager] _loadUser: user storageString loaded
oidc-client-ts.js:48 [User.fromStorageString] begin
oidc-client-ts.js:48 [UserManager] _loadUser: user storageString loaded
oidc-client-ts.js:48 [User.fromStorageString] begin
oidc-client-ts.js:48 [UserManager] _loadUser: user storageString loaded
oidc-client-ts.js:48 [User.fromStorageString] begin
oidc-client-ts.js:53 [UserManager] getUser: user loaded
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 31
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 1 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: using duration 1
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 32 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: using duration 32
oidc-client-ts.js:53 [UserManager] getUser: user loaded
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 31
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 1 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: using duration 1
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 32 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: using duration 32
oidc-client-ts.js:53 [UserManager] getUser: user loaded
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 31
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 1 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: skipping since already initialized for expiration at 1660524585
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 32 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: skipping since already initialized for expiration at 1660524616
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 0
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] raise:
oidc-client-ts.js:48 [SilentRenewService] _tokenExpiring: begin
oidc-client-ts.js:48 [UserManager] signinSilent: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManager] _loadUser: user storageString loaded
oidc-client-ts.js:48 [User.fromStorageString] begin
oidc-client-ts.js:48 [UserManager] signinSilent: using refresh token
oidc-client-ts.js:48 [OidcClient] useRefreshToken: begin
oidc-client-ts.js:48 [TokenClient] exchangeRefreshToken: begin
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('token_endpoint'): begin
oidc-client-ts.js:48 [MetadataService] getMetadata: begin
oidc-client-ts.js:48 [MetadataService] getMetadata: getting metadata from http://localhost:8180/realms/xxx/.well-known/openid-configuration
oidc-client-ts.js:48 [JsonService] getJson: begin
oidc-client-ts.js:48 [JsonService] getJson: url: http://localhost:8180/realms/xxx/.well-known/openid-configuration
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 0
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] raise:
oidc-client-ts.js:48 [SilentRenewService] _tokenExpiring: begin
oidc-client-ts.js:48 [UserManager] signinSilent: begin
oidc-client-ts.js:48 [UserManager] _loadUser: begin
oidc-client-ts.js:48 [WebStorageStateStore] get('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManager] _loadUser: user storageString loaded
oidc-client-ts.js:48 [User.fromStorageString] begin
oidc-client-ts.js:48 [UserManager] signinSilent: using refresh token
oidc-client-ts.js:48 [OidcClient] useRefreshToken: begin
oidc-client-ts.js:48 [TokenClient] exchangeRefreshToken: begin
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('token_endpoint'): begin
oidc-client-ts.js:48 [MetadataService] getMetadata: begin
oidc-client-ts.js:48 [MetadataService] getMetadata: getting metadata from http://localhost:8180/realms/xxx/.well-known/openid-configuration
oidc-client-ts.js:48 [JsonService] getJson: begin
oidc-client-ts.js:48 [JsonService] getJson: url: http://localhost:8180/realms/xxx/.well-known/openid-configuration
2oidc-client-ts.js:48 [JsonService] getJson: HTTP response received, status 200
oidc-client-ts.js:48 [MetadataService] getMetadata: merging remote JSON with seed metadata
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('token_endpoint'): resolved
oidc-client-ts.js:48 [TokenClient] exchangeRefreshToken: got token endpoint
oidc-client-ts.js:48 [JsonService] postForm: begin
oidc-client-ts.js:48 [JsonService] postForm: url: http://localhost:8180/realms/xxx/protocol/openid-connect/token
oidc-client-ts.js:48 [MetadataService] getMetadata: merging remote JSON with seed metadata
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('token_endpoint'): resolved
oidc-client-ts.js:48 [TokenClient] exchangeRefreshToken: got token endpoint
oidc-client-ts.js:48 [JsonService] postForm: begin
oidc-client-ts.js:48 [JsonService] postForm: url: http://localhost:8180/realms/xxx/protocol/openid-connect/token
2oidc-client-ts.js:48 [JsonService] postForm: HTTP response received, status 200
oidc-client-ts.js:48 [TokenClient] exchangeRefreshToken: got response
oidc-client-ts.js:48 [OidcClient] useRefreshToken: validating response SigninResponse {xxx}
oidc-client-ts.js:48 [ResponseValidator] validateRefreshResponse: begin
oidc-client-ts.js:48 [ResponseValidator] _validateIdTokenAttributes: begin
oidc-client-ts.js:48 [ResponseValidator] _validateIdTokenAttributes: decoding ID Token JWT
oidc-client-ts.js:48 [ResponseValidator] validateRefreshResponse: ID Token validated
oidc-client-ts.js:48 [ResponseValidator] _processClaims: begin
oidc-client-ts.js:48 [ResponseValidator] _processClaims: loading user info
oidc-client-ts.js:48 [UserInfoService] getClaims: begin
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('userinfo_endpoint'): begin
oidc-client-ts.js:48 [MetadataService] getMetadata: begin
oidc-client-ts.js:48 [MetadataService] getMetadata: using cached values
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('userinfo_endpoint'): resolved
oidc-client-ts.js:48 [UserInfoService] getClaims: got userinfo url http://localhost:8180/realms/xxx/protocol/openid-connect/userinfo
oidc-client-ts.js:48 [JsonService] getJson: begin
oidc-client-ts.js:48 [JsonService] getJson: token passed, setting Authorization header
oidc-client-ts.js:48 [JsonService] getJson: url: http://localhost:8180/realms/xxx/protocol/openid-connect/userinfo
oidc-client-ts.js:48 [TokenClient] exchangeRefreshToken: got response
oidc-client-ts.js:48 [OidcClient] useRefreshToken: validating response SigninResponse {xxx}
oidc-client-ts.js:48 [ResponseValidator] validateRefreshResponse: begin
oidc-client-ts.js:48 [ResponseValidator] _validateIdTokenAttributes: begin
oidc-client-ts.js:48 [ResponseValidator] _validateIdTokenAttributes: decoding ID Token JWT
oidc-client-ts.js:48 [ResponseValidator] validateRefreshResponse: ID Token validated
oidc-client-ts.js:48 [ResponseValidator] _processClaims: begin
oidc-client-ts.js:48 [ResponseValidator] _processClaims: loading user info
oidc-client-ts.js:48 [UserInfoService] getClaims: begin
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('userinfo_endpoint'): begin
oidc-client-ts.js:48 [MetadataService] getMetadata: begin
oidc-client-ts.js:48 [MetadataService] getMetadata: using cached values
oidc-client-ts.js:48 [MetadataService] _getMetadataProperty('userinfo_endpoint'): resolved
oidc-client-ts.js:48 [UserInfoService] getClaims: got userinfo url http://localhost:8180/realms/xxx/protocol/openid-connect/userinfo
oidc-client-ts.js:48 [JsonService] getJson: begin
oidc-client-ts.js:48 [JsonService] getJson: token passed, setting Authorization header
oidc-client-ts.js:48 [JsonService] getJson: url: http://localhost:8180/realms/xxx/protocol/openid-connect/userinfo
oidc-client-ts.js:48 [JsonService] getJson: HTTP response received, status 200
oidc-client-ts.js:48 [UserInfoService] getClaims: got claims {xxx}
oidc-client-ts.js:48 [ResponseValidator] _processClaims: user info claims received from user info endpoint
oidc-client-ts.js:48 [ResponseValidator] _processClaims: user info claims received, updated profile: {xxx}
oidc-client-ts.js:48 [ResponseValidator] validateRefreshResponse: claims processed
oidc-client-ts.js:48 [UserManager] storeUser: begin
oidc-client-ts.js:48 [UserManager] storeUser: storing user
oidc-client-ts.js:48 [User] toStorageString: begin
oidc-client-ts.js:48 [WebStorageStateStore] set('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 60
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 30 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: using duration 30
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 61 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: using duration 61
oidc-client-ts.js:48 [Event('User loaded')] raise: User {xxx}
oidc-client-ts.js:48 [SilentRenewService] _tokenExpiring: silent token renewal successful
scheduler.development.js:147 [Violation] 'message' handler took 168ms
oidc-client-ts.js:48 [JsonService] getJson: HTTP response received, status 200
ParentSize.js:69 [Violation] 'requestAnimationFrame' handler took 101ms
oidc-client-ts.js:48 [UserInfoService] getClaims: got claims {xxx}
oidc-client-ts.js:48 [ResponseValidator] _processClaims: user info claims received from user info endpoint
oidc-client-ts.js:48 [ResponseValidator] _processClaims: user info claims received, updated profile: {xxx}
oidc-client-ts.js:48 [ResponseValidator] validateRefreshResponse: claims processed
oidc-client-ts.js:48 [UserManager] storeUser: begin
oidc-client-ts.js:48 [UserManager] storeUser: storing user
oidc-client-ts.js:48 [User] toStorageString: begin
oidc-client-ts.js:48 [WebStorageStateStore] set('user:http://localhost:8180/realms/xxx'): begin
oidc-client-ts.js:48 [UserManagerEvents] load: begin
oidc-client-ts.js:48 [UserManagerEvents] load: access token present, remaining duration: 59
oidc-client-ts.js:48 [UserManagerEvents] load: registering expiring timer, raising in 29 seconds
oidc-client-ts.js:48 [Timer('Access token expiring')] init: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expiring')] init: using duration 29
oidc-client-ts.js:48 [UserManagerEvents] load: registering expired timer, raising in 60 seconds
oidc-client-ts.js:48 [Timer('Access token expired')] init: begin
oidc-client-ts.js:48 [Timer('Access token expired')] cancel: begin
oidc-client-ts.js:48 [Timer('Access token expired')] init: using duration 60
oidc-client-ts.js:48 [Event('User loaded')] raise: User {xxx}
oidc-client-ts.js:48 [SilentRenewService] _tokenExpiring: silent token renewal successful
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 25
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 56
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 24
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 55
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 20
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 51
oidc-client-ts.js:48 [Timer('Access token expiring')] timer completes in 19
oidc-client-ts.js:48 [Timer('Access token expired')] timer completes in 50

(note duplicated timer at the end)

jamesmeneghello avatar Aug 15 '22 00:08 jamesmeneghello

Did you find a solution for this problem?

weyert avatar Nov 16 '22 13:11 weyert

I've also encountered a duplicate authentication issue. It transformed into a race condition where authentication was called in an infinite loop and my laptop would shut down into protection mode. The only thing that worked for me was to set "silent_redirect_uri" to an empty string (because it would take the same value from redirect_uri) or to block self-frame through CSP so silent redirect wouldn't activate but that was an extreme method found by mistake :)). The only problem is that the silent authentication doesn't work anymore since I don't have the silent redirect link.

EduardDumitru avatar Jun 20 '23 07:06 EduardDumitru