Just me, overcomplicating something that is supposed to be easy: migrating to Authentication methods policy in Entra. Yes, I’m late to the party and I probably did not read all the documentation*, but wanted to share my journey with Software OATH tokens.
* I indeed did not read enough documentation
TL;DR
- MS Authenticator (push + optional OTP) is displayed as Software OATH token too in User registration details
- MS Authenticator (push + optional OTP) is not in scope for the Software OATH token Authentication method if you disable it
- MS Graph exposes some valuable information (lastUsedDateTime) for the authentication methods, which is probably useful for housekeeping
- AzureAD Graph stores even more information
- Chaos theory: SW token backup in a personal account may lead to total takeover of work account
So, the Automated migration guide just suggested to enable all the authentication methods and I’m fortunate enough to be surrounded with really smart people who said: we don’t need hardware- and software OATH tokens, just disable it. First, I agreed, then disagreed and finally I agreed again.
NOTE: While looking for some documentation, I found some great articles that explains my issue in a more structured manner:
As a first step, I went to the User registration details and filtered the Methods registered to “Software OATH token” and saw that every user with the Authenticator app has also this method registered

However, navigating to the user’s Authentication methods page, it showed Microsoft Authenticator only, no separate entry for OATH token

Heading back to the Authentication methods | Policies menu, Microsoft was kind enough to confuse me with the description for this method:

At this point, I probably could have created a Conditional Access Policy in Report-only mode that requires an Authentication strenght that requires anything but Software OTP, check the results… but I don’t like to take the easy way.
Now in the playground, I set up a user with Authenticator (push+optional OTP) + Google Authenticator + Microsoft Authenticator (Software OTP), let’s see what happens when I log in with Authenticator (optional) OTP:

And when using Authenticator (configured as Software OATH token [more on this later]):

To make sure, here is one where I used Google Authenticator:

So far:
– User registration details report is misleading, because Authenticator app (notification + optional OTP) shows up as Software OATH token too
– Sign-in logs are also misleading, because there is no distinction between Authentication optional OTP and other Software OATH tokens
– Even the Software OATH tokens authentication method policy is misleading: “This policy control manages the ability to register and use any authenticator app including Microsoft Authenticator to manage software OATH tokens.” – I may have highlighted here that it does not effect the optional OTP method, which can be configured under Microsoft Authenticator
Don’t get me wrong, I don’t want to make excuses for not doing my homework and reading the manual carefully – I’m here to share what I learnt by this mistake. Now let’s bring some value to this post…
Differences between a Software OATH token and the Authenticator optional OTP
The Authentication methods page for a given user does not reveal too much interesting information:

However, hidden information can be revealed with my favorite button (F12): when you click on the auth methods page, a graph request is made:
GET https://graph.microsoft.com/beta/users/<userid>/authentication/methods

So we have some additional information that can be useful:
"@odata.type": "#microsoft.graph.softwareOathAuthenticationMethod",
"id": "74adf719-d1de-4c72-b17e-f80a2256e6fe",
"isUsable": true,
"methodUsabilityReason": "EnabledByPolicy",
"lastUsedDateTime": "2026-09-24T13:22:54.4376185Z",
"secretKey": null
lastUsedDateTime may be useful when cleaning up old registrations, isUsable can also be used to find methods that can be removed (admitting here I’m a compulsive cleaner). Funny thing is that the Graph API documentation does not really mention these properties:

What about the OG AzureAD Graph?
GET https://graph.windows.net/myorganization/users/<userid>?api-version=1.6-internal
Under strongAuthenticationDetail we have phoneAppDetails property:

A bit interesting is that under oathTokenMetadata property, the push notification Authenticator seems to be the only one that is not enabled:

I’m not sure if this information is useful, but at least interesting.
Based on this my theory is, that the User registration details use the information from AzureAD Graph to populate the registered methods. However, both the Authenticator (notification + optional OTP) and the alternative authenticator apps have the deviceTag set to “SoftwareTokenActivated” which is translated to “Software OATH token” and this is confusing (at least for me).
WARNING: Unverified chaos theory below
What bothers me about enabling SW auth tokens is that they can be backed up and restored. Microsoft authenticator uses a personal Microsoft account, but work or school accounts cannot be restored

However – I need to verify this – when MS Authenticator is set up az SW OATH token, it is treated as a personal account (so it can be restored)

It is easier to imagine this scenario with Google Authenticator where the token is backed up to the user’s Google account. If we enabled email OTP for SSPR with the same email address then the compromised Google account can be used for total account takeover: restored Authenticator for MFA (SW OATH token) + email access for SSPR.
Please correct me if I’m wrong: LinkedIn






































































































