The App Registration Had No Secret — So How Was It Authenticating?
The application was successfully authenticating to Microsoft Entra ID.
There was just one problem.
The app registration had no client secret.
No obvious password-style credential explained the successful token requests.
Agent Foskett stopped treating “no secret” as “no credential” and followed the workload identity evidence instead.
What identity was actually signing in — and what credential was it presenting?

No Secret. Successful Authentication.
A client secret is only one way an application can authenticate. The investigation had to identify the application, its service principal, its configured credentials and the workload sign-ins that showed what was happening.
The finding looked impossible
The first check seemed reassuring: the app registration did not have a client secret configured.
But the authentication evidence was real.
That meant the absence of a secret was not the end of the investigation. It was the beginning.
Applications can authenticate with credentials other than client secrets.
Application object and service principal are not the same thing
Start with the workload sign-ins
AADServicePrincipalSignInLogs table can provide the timeline Agent Foskett needed. He started with the application identifier rather than guessing which credential was involved.- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
let AppId = "11111111-2222-3333-4444-555555555555";
AADServicePrincipalSignInLogs
| where TimeGenerated > ago(30d)
| where AppId =~ AppId
| project TimeGenerated,
AppDisplayName,
AppId,
ServicePrincipalId,
ResourceDisplayName,
IPAddress,
ResultType,
ResultDescription
| order by TimeGenerated descThe successful events changed the investigation
That ruled out the simple explanation that the application was merely configured but unused.
Agent Foskett now had an application ID, a service principal ID, timestamps, resources and source context to investigate.
The question was no longer whether the application authenticated. The question was how.
No client secret does not mean no credential
The private key itself is not stored in the app registration. The application or its hosting platform must possess it.
That distinction explained why looking only for a secret produced the wrong conclusion.
Inspect the app registration's credentials
For an authorised investigation, Microsoft Graph PowerShell can be used to retrieve the application object and inspect its credential metadata.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
$app = Get-MgApplication -Filter "appId eq '11111111-2222-3333-4444-555555555555'"
$app | Select-Object DisplayName, AppId, Id
$app.PasswordCredentials |
Select-Object DisplayName, KeyId, StartDateTime, EndDateTime
$app.KeyCredentials |
Select-Object DisplayName, KeyId, Type, Usage,
StartDateTime, EndDateTimeThere it was: a key credential
That was the missing piece.
The visible public credential metadata did not reveal the private key, and it did not by itself prove which machine held that private key. But it established that the application had another valid authentication mechanism configured.
The app had no secret. It did not have no credential.
Now investigate the certificate timeline
If successful authentications occurred while the certificate credential was valid, the timelines were consistent with certificate-based authentication. That correlation strengthened the investigation, but Agent Foskett still avoided claiming more than the available telemetry proved.
Who added the credential?
Agent Foskett therefore moved from sign-in evidence to change history.
The investigation searched Microsoft Entra audit logs for updates to the application and service principal around the time the credential appeared.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
AuditLogs
| where TimeGenerated > ago(90d)
| where Category =~ "ApplicationManagement"
| where OperationName has_any (
"application",
"service principal")
| mv-expand TargetResources
| where tostring(TargetResources.displayName)
=~ "Finance Automation"
| project TimeGenerated,
OperationName,
Result,
InitiatedBy,
TargetResources
| order by TimeGenerated ascThe audit event needed inspection, not assumptions
AuditLogs records and their modified properties to determine what changed, who initiated the change and whether the activity matched an approved deployment.He did not assume that every application-management event meant a certificate had been added. Operation names and modified properties must be examined in the tenant's actual audit data.
The change record provided context for the credential. The sign-in record provided context for its use.
What about managed identities?
Azure managed identities are service principals whose credentials are managed by the platform. If the identity under investigation were a managed identity, the investigation path would be different.
That is why the analyst must identify the workload identity type before deciding what credential should exist.
Scope the service principal's activity
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
let ServicePrincipalId =
"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
AADServicePrincipalSignInLogs
| where TimeGenerated > ago(30d)
| where ServicePrincipalId =~ ServicePrincipalId
| summarize SignIns=count(),
FirstSeen=min(TimeGenerated),
LastSeen=max(TimeGenerated)
by ResourceDisplayName,
IPAddress,
ResultType
| order by SignIns descPermissions answer a different question
Agent Foskett therefore reviewed the service principal's assigned permissions and application role assignments separately.
A certificate does not grant Microsoft Graph or resource permissions by itself. It is an authentication credential. The service principal's permissions determine the potential impact of successful authentication.
Credential + identity + permissions + activity = the investigation context.
Build the workload identity timeline
What Agent Foskett checked
What the evidence can and cannot prove
Correlating those facts can strongly support the investigation, but analysts should not invent a private-key location or credential-use detail that their telemetry does not actually expose.
Likewise, a successful workload sign-in does not by itself prove malicious activity. The application owner, change history, source context, permissions, deployment design and expected behaviour all matter.
Follow the evidence far enough to explain the authentication — but not farther than the evidence allows.
The lesson
At first glance, that seemed inconsistent with the successful authentication events.
It wasn't.
Agent Foskett identified the service principal, reconstructed its workload sign-ins, inspected the application's credentials and found the alternative authentication path: a key credential used for certificate-based application authentication.
Then he investigated who configured it, when it became valid, what resources the identity authenticated to and what permissions the service principal held.
No client secret does not mean no credential.
Related investigations
Final thought
An application may have no client secret and still authenticate successfully through another supported mechanism.
Identify the application. Identify the service principal. Inspect the credentials. Review the permissions. Then correlate the workload sign-ins with the change history.
Follow the evidence. Build the timeline.
The Logs Already Knew! 🔎

