Skip to content

fix: resolve AuthenticationController 401 errors from token caching bugs#8144

Merged
mathieuartu merged 16 commits intomainfrom
fix/auth-401-race-condition
Mar 10, 2026
Merged

fix: resolve AuthenticationController 401 errors from token caching bugs#8144
mathieuartu merged 16 commits intomainfrom
fix/auth-401-race-condition

Conversation

@mathieuartu
Copy link
Contributor

@mathieuartu mathieuartu commented Mar 9, 2026

Explanation

⚠️ This is a breaking change, and clients will need to be updated around the E2E setup area.
Needed changes are in the test-drive PRs below.

Extension test-drive PR: MetaMask/metamask-extension#40711

References

Related to https://consensyssoftware.atlassian.net/browse/MUL-1549

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

High Risk
Touches authentication session validation and token retrieval behavior (including breaking test/mock contract), which can affect login/coalescing and any consumers relying on cached tokens.

Overview
Fixes profile auth/token caching edge-cases that could lead to stale bearer tokens (401s).

profile-sync-controller now validates cached login sessions by decoding the JWT exp claim (rejecting expired/malformed/non-JWT tokens) and resolves undefined entropySourceId to the primary SRP ID (cached across calls and cleared on sign-out), eliminating duplicate logins caused by undefined vs explicit primary IDs; getUserProfileLineage is updated to accept an optional entropySourceId end-to-end.

profile-metrics-controller moves AuthenticationController:getBearerToken acquisition inside the retry execution so each retry fetches a fresh token. E2E/test mocks are updated to wrap mock identifiers in JWT-shaped tokens and provide getE2EIdentifierFromJwt to extract the original identifier.

Written by Cursor Bugbot for commit 884180c. This will update automatically on new commits. Configure here.

@mathieuartu mathieuartu self-assigned this Mar 9, 2026
@mathieuartu mathieuartu requested review from a team as code owners March 9, 2026 11:27
@mathieuartu mathieuartu force-pushed the fix/auth-401-race-condition branch from b4e071c to 75ae8bd Compare March 9, 2026 12:24
@mathieuartu mathieuartu force-pushed the fix/auth-401-race-condition branch from 75ae8bd to 8e4f77e Compare March 9, 2026 12:34
@mathieuartu
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Mar 9, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-fb0893ad9",
  "@metamask-previews/accounts-controller": "36.0.1-preview-fb0893ad9",
  "@metamask-previews/address-book-controller": "7.0.1-preview-fb0893ad9",
  "@metamask-previews/ai-controllers": "0.2.0-preview-fb0893ad9",
  "@metamask-previews/analytics-controller": "1.0.0-preview-fb0893ad9",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-fb0893ad9",
  "@metamask-previews/announcement-controller": "8.0.0-preview-fb0893ad9",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-fb0893ad9",
  "@metamask-previews/approval-controller": "8.0.0-preview-fb0893ad9",
  "@metamask-previews/assets-controller": "2.2.0-preview-fb0893ad9",
  "@metamask-previews/assets-controllers": "100.1.0-preview-fb0893ad9",
  "@metamask-previews/base-controller": "9.0.0-preview-fb0893ad9",
  "@metamask-previews/base-data-service": "0.0.0-preview-fb0893ad9",
  "@metamask-previews/bridge-controller": "68.0.0-preview-fb0893ad9",
  "@metamask-previews/bridge-status-controller": "68.0.0-preview-fb0893ad9",
  "@metamask-previews/build-utils": "3.0.4-preview-fb0893ad9",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-fb0893ad9",
  "@metamask-previews/claims-controller": "0.4.2-preview-fb0893ad9",
  "@metamask-previews/client-controller": "1.0.0-preview-fb0893ad9",
  "@metamask-previews/compliance-controller": "1.0.1-preview-fb0893ad9",
  "@metamask-previews/composable-controller": "12.0.0-preview-fb0893ad9",
  "@metamask-previews/config-registry-controller": "0.1.0-preview-fb0893ad9",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-fb0893ad9",
  "@metamask-previews/controller-utils": "11.19.0-preview-fb0893ad9",
  "@metamask-previews/core-backend": "6.0.0-preview-fb0893ad9",
  "@metamask-previews/delegation-controller": "2.0.1-preview-fb0893ad9",
  "@metamask-previews/earn-controller": "11.1.1-preview-fb0893ad9",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-fb0893ad9",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-fb0893ad9",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-fb0893ad9",
  "@metamask-previews/ens-controller": "19.0.3-preview-fb0893ad9",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-fb0893ad9",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-fb0893ad9",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-fb0893ad9",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-fb0893ad9",
  "@metamask-previews/foundryup": "1.0.1-preview-fb0893ad9",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-fb0893ad9",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-fb0893ad9",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-fb0893ad9",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-fb0893ad9",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-fb0893ad9",
  "@metamask-previews/keyring-controller": "25.1.0-preview-fb0893ad9",
  "@metamask-previews/logging-controller": "7.0.1-preview-fb0893ad9",
  "@metamask-previews/message-manager": "14.1.0-preview-fb0893ad9",
  "@metamask-previews/messenger": "0.3.0-preview-fb0893ad9",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-fb0893ad9",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-fb0893ad9",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-fb0893ad9",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-fb0893ad9",
  "@metamask-previews/name-controller": "9.0.0-preview-fb0893ad9",
  "@metamask-previews/network-controller": "30.0.0-preview-fb0893ad9",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-fb0893ad9",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-fb0893ad9",
  "@metamask-previews/permission-controller": "12.2.0-preview-fb0893ad9",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-fb0893ad9",
  "@metamask-previews/perps-controller": "1.0.0-preview-fb0893ad9",
  "@metamask-previews/phishing-controller": "16.3.0-preview-fb0893ad9",
  "@metamask-previews/polling-controller": "16.0.3-preview-fb0893ad9",
  "@metamask-previews/preferences-controller": "22.1.0-preview-fb0893ad9",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-fb0893ad9",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-fb0893ad9",
  "@metamask-previews/ramps-controller": "10.2.0-preview-fb0893ad9",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-fb0893ad9",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-fb0893ad9",
  "@metamask-previews/sample-controllers": "4.0.3-preview-fb0893ad9",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-fb0893ad9",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-fb0893ad9",
  "@metamask-previews/shield-controller": "5.0.1-preview-fb0893ad9",
  "@metamask-previews/signature-controller": "39.0.4-preview-fb0893ad9",
  "@metamask-previews/storage-service": "1.0.0-preview-fb0893ad9",
  "@metamask-previews/subscription-controller": "6.0.0-preview-fb0893ad9",
  "@metamask-previews/transaction-controller": "62.20.0-preview-fb0893ad9",
  "@metamask-previews/transaction-pay-controller": "16.4.0-preview-fb0893ad9",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-fb0893ad9"
}

@mathieuartu mathieuartu changed the title fix: AuthenticationController race condition with undefined entropySourceId fix: resolve undefined entropySourceId to primary SRP to fix token caching and dedup Mar 9, 2026
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

@mathieuartu mathieuartu changed the title fix: resolve undefined entropySourceId to primary SRP to fix token caching and dedup fix: resolve AuthenticationController 401 errors from token caching bugs Mar 9, 2026
@mathieuartu
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Mar 9, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-378ea32e1",
  "@metamask-previews/accounts-controller": "36.0.1-preview-378ea32e1",
  "@metamask-previews/address-book-controller": "7.0.1-preview-378ea32e1",
  "@metamask-previews/ai-controllers": "0.2.0-preview-378ea32e1",
  "@metamask-previews/analytics-controller": "1.0.0-preview-378ea32e1",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-378ea32e1",
  "@metamask-previews/announcement-controller": "8.0.0-preview-378ea32e1",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-378ea32e1",
  "@metamask-previews/approval-controller": "8.0.0-preview-378ea32e1",
  "@metamask-previews/assets-controller": "2.2.0-preview-378ea32e1",
  "@metamask-previews/assets-controllers": "100.1.0-preview-378ea32e1",
  "@metamask-previews/base-controller": "9.0.0-preview-378ea32e1",
  "@metamask-previews/base-data-service": "0.0.0-preview-378ea32e1",
  "@metamask-previews/bridge-controller": "68.0.0-preview-378ea32e1",
  "@metamask-previews/bridge-status-controller": "68.0.0-preview-378ea32e1",
  "@metamask-previews/build-utils": "3.0.4-preview-378ea32e1",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-378ea32e1",
  "@metamask-previews/claims-controller": "0.4.2-preview-378ea32e1",
  "@metamask-previews/client-controller": "1.0.0-preview-378ea32e1",
  "@metamask-previews/compliance-controller": "1.0.1-preview-378ea32e1",
  "@metamask-previews/composable-controller": "12.0.0-preview-378ea32e1",
  "@metamask-previews/config-registry-controller": "0.1.0-preview-378ea32e1",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-378ea32e1",
  "@metamask-previews/controller-utils": "11.19.0-preview-378ea32e1",
  "@metamask-previews/core-backend": "6.0.0-preview-378ea32e1",
  "@metamask-previews/delegation-controller": "2.0.1-preview-378ea32e1",
  "@metamask-previews/earn-controller": "11.1.1-preview-378ea32e1",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-378ea32e1",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-378ea32e1",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-378ea32e1",
  "@metamask-previews/ens-controller": "19.0.3-preview-378ea32e1",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-378ea32e1",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-378ea32e1",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-378ea32e1",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-378ea32e1",
  "@metamask-previews/foundryup": "1.0.1-preview-378ea32e1",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-378ea32e1",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-378ea32e1",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-378ea32e1",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-378ea32e1",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-378ea32e1",
  "@metamask-previews/keyring-controller": "25.1.0-preview-378ea32e1",
  "@metamask-previews/logging-controller": "7.0.1-preview-378ea32e1",
  "@metamask-previews/message-manager": "14.1.0-preview-378ea32e1",
  "@metamask-previews/messenger": "0.3.0-preview-378ea32e1",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-378ea32e1",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-378ea32e1",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-378ea32e1",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-378ea32e1",
  "@metamask-previews/name-controller": "9.0.0-preview-378ea32e1",
  "@metamask-previews/network-controller": "30.0.0-preview-378ea32e1",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-378ea32e1",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-378ea32e1",
  "@metamask-previews/permission-controller": "12.2.0-preview-378ea32e1",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-378ea32e1",
  "@metamask-previews/perps-controller": "1.0.0-preview-378ea32e1",
  "@metamask-previews/phishing-controller": "16.3.0-preview-378ea32e1",
  "@metamask-previews/polling-controller": "16.0.3-preview-378ea32e1",
  "@metamask-previews/preferences-controller": "22.1.0-preview-378ea32e1",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-378ea32e1",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-378ea32e1",
  "@metamask-previews/ramps-controller": "10.2.0-preview-378ea32e1",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-378ea32e1",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-378ea32e1",
  "@metamask-previews/sample-controllers": "4.0.3-preview-378ea32e1",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-378ea32e1",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-378ea32e1",
  "@metamask-previews/shield-controller": "5.0.1-preview-378ea32e1",
  "@metamask-previews/signature-controller": "39.0.4-preview-378ea32e1",
  "@metamask-previews/storage-service": "1.0.0-preview-378ea32e1",
  "@metamask-previews/subscription-controller": "6.0.0-preview-378ea32e1",
  "@metamask-previews/transaction-controller": "62.20.0-preview-378ea32e1",
  "@metamask-previews/transaction-pay-controller": "16.4.0-preview-378ea32e1",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-378ea32e1"
}

@mathieuartu mathieuartu force-pushed the fix/auth-401-race-condition branch from 2ce348f to d7e0234 Compare March 9, 2026 21:47
@mathieuartu
Copy link
Contributor Author

@metamaskbot publish-preview

@github-actions
Copy link
Contributor

github-actions bot commented Mar 9, 2026

Preview builds have been published. See these instructions for more information about preview builds.

Expand for full list of packages and versions.
{
  "@metamask-previews/account-tree-controller": "4.1.1-preview-d7e023427",
  "@metamask-previews/accounts-controller": "36.0.1-preview-d7e023427",
  "@metamask-previews/address-book-controller": "7.0.1-preview-d7e023427",
  "@metamask-previews/ai-controllers": "0.2.0-preview-d7e023427",
  "@metamask-previews/analytics-controller": "1.0.0-preview-d7e023427",
  "@metamask-previews/analytics-data-regulation-controller": "0.0.0-preview-d7e023427",
  "@metamask-previews/announcement-controller": "8.0.0-preview-d7e023427",
  "@metamask-previews/app-metadata-controller": "2.0.0-preview-d7e023427",
  "@metamask-previews/approval-controller": "8.0.0-preview-d7e023427",
  "@metamask-previews/assets-controller": "2.2.0-preview-d7e023427",
  "@metamask-previews/assets-controllers": "100.1.0-preview-d7e023427",
  "@metamask-previews/base-controller": "9.0.0-preview-d7e023427",
  "@metamask-previews/base-data-service": "0.0.0-preview-d7e023427",
  "@metamask-previews/bridge-controller": "68.0.0-preview-d7e023427",
  "@metamask-previews/bridge-status-controller": "68.0.0-preview-d7e023427",
  "@metamask-previews/build-utils": "3.0.4-preview-d7e023427",
  "@metamask-previews/chain-agnostic-permission": "1.4.0-preview-d7e023427",
  "@metamask-previews/claims-controller": "0.4.2-preview-d7e023427",
  "@metamask-previews/client-controller": "1.0.0-preview-d7e023427",
  "@metamask-previews/compliance-controller": "1.0.1-preview-d7e023427",
  "@metamask-previews/composable-controller": "12.0.0-preview-d7e023427",
  "@metamask-previews/config-registry-controller": "0.1.0-preview-d7e023427",
  "@metamask-previews/connectivity-controller": "0.1.0-preview-d7e023427",
  "@metamask-previews/controller-utils": "11.19.0-preview-d7e023427",
  "@metamask-previews/core-backend": "6.0.0-preview-d7e023427",
  "@metamask-previews/delegation-controller": "2.0.1-preview-d7e023427",
  "@metamask-previews/earn-controller": "11.1.1-preview-d7e023427",
  "@metamask-previews/eip-5792-middleware": "3.0.0-preview-d7e023427",
  "@metamask-previews/eip-7702-internal-rpc-middleware": "0.1.0-preview-d7e023427",
  "@metamask-previews/eip1193-permission-middleware": "1.0.3-preview-d7e023427",
  "@metamask-previews/ens-controller": "19.0.3-preview-d7e023427",
  "@metamask-previews/error-reporting-service": "3.0.1-preview-d7e023427",
  "@metamask-previews/eth-block-tracker": "15.0.1-preview-d7e023427",
  "@metamask-previews/eth-json-rpc-middleware": "23.1.0-preview-d7e023427",
  "@metamask-previews/eth-json-rpc-provider": "6.0.0-preview-d7e023427",
  "@metamask-previews/foundryup": "1.0.1-preview-d7e023427",
  "@metamask-previews/gas-fee-controller": "26.0.3-preview-d7e023427",
  "@metamask-previews/gator-permissions-controller": "2.0.0-preview-d7e023427",
  "@metamask-previews/geolocation-controller": "0.1.1-preview-d7e023427",
  "@metamask-previews/json-rpc-engine": "10.2.3-preview-d7e023427",
  "@metamask-previews/json-rpc-middleware-stream": "8.0.8-preview-d7e023427",
  "@metamask-previews/keyring-controller": "25.1.0-preview-d7e023427",
  "@metamask-previews/logging-controller": "7.0.1-preview-d7e023427",
  "@metamask-previews/message-manager": "14.1.0-preview-d7e023427",
  "@metamask-previews/messenger": "0.3.0-preview-d7e023427",
  "@metamask-previews/multichain-account-service": "7.0.0-preview-d7e023427",
  "@metamask-previews/multichain-api-middleware": "1.2.7-preview-d7e023427",
  "@metamask-previews/multichain-network-controller": "3.0.4-preview-d7e023427",
  "@metamask-previews/multichain-transactions-controller": "7.0.1-preview-d7e023427",
  "@metamask-previews/name-controller": "9.0.0-preview-d7e023427",
  "@metamask-previews/network-controller": "30.0.0-preview-d7e023427",
  "@metamask-previews/network-enablement-controller": "4.2.0-preview-d7e023427",
  "@metamask-previews/notification-services-controller": "22.0.0-preview-d7e023427",
  "@metamask-previews/permission-controller": "12.2.0-preview-d7e023427",
  "@metamask-previews/permission-log-controller": "5.0.0-preview-d7e023427",
  "@metamask-previews/perps-controller": "1.0.0-preview-d7e023427",
  "@metamask-previews/phishing-controller": "16.3.0-preview-d7e023427",
  "@metamask-previews/polling-controller": "16.0.3-preview-d7e023427",
  "@metamask-previews/preferences-controller": "22.1.0-preview-d7e023427",
  "@metamask-previews/profile-metrics-controller": "3.0.1-preview-d7e023427",
  "@metamask-previews/profile-sync-controller": "27.1.0-preview-d7e023427",
  "@metamask-previews/ramps-controller": "10.2.0-preview-d7e023427",
  "@metamask-previews/rate-limit-controller": "7.0.0-preview-d7e023427",
  "@metamask-previews/remote-feature-flag-controller": "4.1.0-preview-d7e023427",
  "@metamask-previews/sample-controllers": "4.0.3-preview-d7e023427",
  "@metamask-previews/seedless-onboarding-controller": "8.1.0-preview-d7e023427",
  "@metamask-previews/selected-network-controller": "26.0.3-preview-d7e023427",
  "@metamask-previews/shield-controller": "5.0.1-preview-d7e023427",
  "@metamask-previews/signature-controller": "39.0.4-preview-d7e023427",
  "@metamask-previews/storage-service": "1.0.0-preview-d7e023427",
  "@metamask-previews/subscription-controller": "6.0.0-preview-d7e023427",
  "@metamask-previews/transaction-controller": "62.20.0-preview-d7e023427",
  "@metamask-previews/transaction-pay-controller": "16.4.0-preview-d7e023427",
  "@metamask-previews/user-operation-controller": "41.0.3-preview-d7e023427"
}

@mathieuartu mathieuartu enabled auto-merge March 10, 2026 12:33
Copy link
Contributor

@ccharly ccharly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

Copy link
Member

@mikesposito mikesposito left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ProfileMetricsController changes look good

@mathieuartu mathieuartu added this pull request to the merge queue Mar 10, 2026
Merged via the queue into main with commit f234cee Mar 10, 2026
322 checks passed
@mathieuartu mathieuartu deleted the fix/auth-401-race-condition branch March 10, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants