"Sometimes I can't sign in" is three teams' problem and therefore nobody's: the evidence lives in Entra sign-in logs, Intune device data and network state, and no single console shows the join. This recipe pulls one evidence set from each layer and has AI correlate them into ranked, verifiable hypotheses.
Tier: Advanced · Workflow area: Troubleshooting & diagnosis · ~40 minutes
Cross-system root-cause analysis is where AI assistance earns its Advanced tier: the model's real contribution is holding three unfamiliar log schemas in view at once and noticing that the timestamps line up. Your contribution is pulling honest evidence and verifying the correlation before anyone acts on it.
Fix the frame first: one user, one time window. Pick a concrete failure instance the user can timestamp ("blocked at ~09:12 today"). Correlation across "sometimes" fails; correlation across 08:30–10:00 on one day works.
Pull the identity evidence — Entra sign-in logs. Console path: Entra admin center → Monitoring & health → Sign-in logs, filter by user and time, and open the failed entries — note the error code, failure reason, Conditional Access tab results, and the correlation ID. Or via Graph:
# App registration with AuditLog.Read.All; $TOKEN via your normal flow
curl -s -H "Authorization: Bearer $TOKEN" \
"https://graph.microsoft.com/v1.0/auditLogs/signIns?\$filter=userPrincipalName eq 'a.rao@yourco.com' and createdDateTime ge 2026-08-06T03:00:00Z&\$top=50" \
| jq '[.value[] | {createdDateTime, appDisplayName, status: .status.errorCode,
failureReason: .status.failureReason, ca: .conditionalAccessStatus,
ip: .ipAddress, device: .deviceDetail}]' > signins.json
Pull the endpoint evidence — Intune device state. Console path: Intune admin center → Devices → [device] → Hardware / Compliance; note compliance state, last check-in, and any policy with "Error" or "Conflict". Via Graph:
curl -s -H "Authorization: Bearer $TOKEN" \
"https://graph.microsoft.com/v1.0/deviceManagement/managedDevices?\$filter=userPrincipalName eq 'a.rao@yourco.com'" \
| jq '[.value[] | {deviceName, complianceState, lastSyncDateTime,
operatingSystem, osVersion}]' > devices.json
If your tenant streams to Log Analytics, Copilot-generated KQL is the fast path — ask Copilot in the portal for "sign-in failures for user X with device compliance state over the window", or write it directly:
SigninLogs
| where UserPrincipalName == "a.rao@yourco.com"
| where TimeGenerated between (datetime(2026-08-06T03:00:00Z) .. datetime(2026-08-06T05:00:00Z))
| project TimeGenerated, AppDisplayName, ResultType, ResultDescription,
ConditionalAccessStatus, IPAddress, DeviceDetail
| order by TimeGenerated asc
Treat Copilot-built KQL like any AI output: read it, check the table and column names against your workspace, run it, and confirm the row counts look sane before trusting the result set.
Pull the network evidence — where was the user, on what path? This layer is usually thinnest: the egress IP from the sign-in log itself (is it the office egress or the VPN pool?), VPN session logs for the window, and a client-side capture if you have one (ipconfig /all and dsregcmd /status from the device at failure time). Even "user was on office Wi-Fi, egress should have been 203.0.113.10 but sign-ins show the VPN pool" is a decisive network fact.
Correlate with AI — ranked hypotheses, each with its verification.
Correlate three evidence sets for a cross-system RCA.
SYMPTOM: user intermittently blocked signing in to Outlook/Teams since
Monday; works at home, fails "sometimes" in the office. One confirmed
failure at 09:12 IST today.
EVIDENCE A — Entra sign-in log extract (JSON): [paste signins.json]
EVIDENCE B — Intune device state (JSON): [paste devices.json]
EVIDENCE C — network context: office egress is 203.0.113.10; VPN pool is
198.51.100.0/24; failing sign-ins show IPs from the VPN pool; dsregcmd
shows AzureAdJoined YES, device ID matches Intune record.
Produce:
1. TIMELINE: merge all three sources into one timestamped sequence around
the 09:12 failure. Flag timezone assumptions explicitly.
2. HYPOTHESES: ranked candidate root causes. For each — the mechanism,
which evidence supports it, which evidence it fails to explain, and
the VERIFICATION: the exact log field, console path, or query that
would confirm it.
3. GAPS: what evidence would most improve the ranking.
Rules: cite only fields present in the evidence. Error codes mean what
Microsoft says they mean — if unsure of a code, say so rather than guess.
Verify the top hypothesis in the consoles before acting. A typical strong output:
1. (Most likely) CA policy "Require compliant device" blocks when traffic
egresses via VPN pool: VPN pool is not in the "Trusted locations" named
location, and the device — compliant per Intune — fails the location-
scoped policy variant. Supports: failures only from 198.51.100.x;
ResultType 53003; CA tab shows policy P-04 failed. Does not explain: one
success from VPN at 08:41 — check whether that was a refresh token, not
an interactive auth.
VERIFICATION: Entra → Conditional Access → P-04 → named locations; and
the 08:41 entry's "incoming token type" field.
Do the verification with your own eyes: open the policy, read the named-location list, check the 08:41 entry. Model error-code glosses are usually right and occasionally subtly wrong — the Entra sign-in error code lookup on Microsoft Learn is the authority. Only a console-confirmed hypothesis moves to remediation, and the fix (adding the VPN pool to trusted locations, adjusting the policy) goes through change control with the correlated timeline attached as justification.
File the RCA. Timeline, confirmed cause, disconfirmed alternates and their evidence, and the change reference — into the ticket and the problem record. Cross-system RCAs are rare and expensive; a filed one is reusable the next three times the symptom shape recurs.
/api/v1/logs?filter=...) or Google Workspace login audit replaces Entra; MDM (Jamf, Workspace ONE) replaces Intune; the correlation prompt is unchanged.Sign-in logs are behavioral data — IPs, locations, timestamps of a named person's activity. Minimize what you extract, mask the UPN where the analysis allows, prefer tenant-approved AI tooling, and handle extracts under the same policy as the logs themselves.
Cross-system mysteries yield to one discipline: a single merged timeline over honest per-layer evidence — AI builds and ranks the story in minutes, but the RCA is only done when the top hypothesis survives your own eyes in the console it names.