This depends on the specific MFA system in play. While most app-based MFA uses either the RFC 6238 TOTP or RFC 4226 HOTP algorithms, the method for sharing the shared secret is not standardised.
Google otpauth
: secret in the QR code
The most common scheme in use is the one originally implemented in Google Authenticator, which has become a de facto standard, of sorts. This involves a otpauth://
URI scheme that is commonly shared via a QR Code. These embed the secret directly into the URI as plaintext, and therefore both the URI and the QR Code encoding of it are usable forever - unless the shared secret is reset on the validator end. In this scheme, the QR code cannot "expire".
Steam/Proprietary pre-authenticated secret pull
However, there are systems that don't follow this approach. Some systems don't use QR codes at all; Steam Guard Mobile Authenticator is an example. It retrieves the key directly from the validator's servers, presumably initially authenticated via the user's single-factor login credentials.
Okta: 2-step secret pull
Okta Verify with Push does registration via QR code, but the QR code does not encode an otpauth://
URI and is not compatible with Google Authenticator. Instead, it encodes a proprietary token that the app then uses to retrieve the actual shared secret from the validator's servers (and register itself for push notifications/authentication in the process). This QR code is not reusable, and can also expire on the server end before it is registered.
Okta does provide the option for an alternative Google Authenticator-compatible registration, though this can be disabled by administrators.
Fortinet: 2-step secret pull
FortiToken Mobile also does registration via QR code, but again the QR code does not encode an otpauth://
URI and is not compatible with Google Authenticator. This is yet another proprietary token that the app uses to retrieve the actual shared secret from the validator's servers, much like Okta Verify with Push. The QR code that is shared with FortiToken has an expiry set at 72 hours and is not usable after that time, nor is it usable more than once
There is no officially supported way to register this secret in Google Authenticator or other token generators.
Same TOTP codes: different methods of sharing the seed
All of Steam Guard, Okta, and FortiToken use the RFC 6238 TOTP algorithm, with a secret that would work perfectly well in other applications implementing the same algorithm if you were able to extract/register it. Two of them use QR codes. But the shared secret is never encoded in the QR code, and the proprietary token that is in the QR code only lasts as long as the server is willing to exchange it for the actual shared secret.