<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Bram Brinkmeier: Entra ID sign-in errors, read for security</title><description>New and re-verified pages on AADSTS codes, KQL and Entra ID investigations.</description><link>https://brambrinkmeier.com/</link><language>en</language><item><title>AADSTS50011: Reply URL does not match</title><link>https://brambrinkmeier.com/entra/aadsts/50011/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50011/</guid><description>AADSTS50011 means the redirect (reply) URI in the sign-in request doesn&apos;t exactly match one registered for the application. It is almost always a configuration mistake: http instead of https, a trailing slash, a wrong port. The exact-match rule is also what stops attackers redirecting authorization codes and tokens to their own server.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50020: Account from identity provider not in tenant</title><link>https://brambrinkmeier.com/entra/aadsts/50020/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50020/</guid><description>AADSTS50020 means an account from another identity provider or tenant tried to sign in to an app in your tenant, and that account isn&apos;t a user or guest there. It is usually a B2B or app misconfiguration: wrong tenant, uninvited guest, single-tenant app. Repeated hits can also reveal orphaned guest accounts that need cleanup.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50034: User account not found in the directory</title><link>https://brambrinkmeier.com/entra/aadsts/50034/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50034/</guid><description>AADSTS50034 means the username doesn&apos;t exist in the Microsoft Entra tenant the sign-in went to. Usually it&apos;s a typo or the wrong tenant. The security signal is volume from one source: many different non-existent usernames from one IP suggests an attacker testing a guessed or leaked user list. Hunt it with ResultType == &quot;50034&quot;.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50053: Account locked or sign-in blocked</title><link>https://brambrinkmeier.com/entra/aadsts/50053/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50053/</guid><description>AADSTS50053 covers two different blocks. Smart lockout locked the account after too many wrong passwords, or Microsoft&apos;s built-in protections blocked a high-confidence risky sign-in regardless of the password. The failure reason tells them apart. A burst across many accounts usually means a password spray tripped lockout.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50055: Password expired</title><link>https://brambrinkmeier.com/entra/aadsts/50055/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50055/</guid><description>AADSTS50055 means the user&apos;s password has expired, so Microsoft Entra ID ended the sign-in and offers a reset. For a real user it is routine. During a password spray it matters more: the wording implies the password entered was correct, just expired, so the attacker likely holds a valid credential.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50057: User account is disabled</title><link>https://brambrinkmeier.com/entra/aadsts/50057/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50057/</guid><description>AADSTS50057 means the user account is disabled in Microsoft Entra ID, so sign-in was refused. After an offboarding it is expected. The security signal is volume and source: many disabled accounts tried from one IP suggests a password spray working from an old user list. Hunt it with ResultType == &quot;50057&quot;.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50074: Strong authentication required, MFA not passed</title><link>https://brambrinkmeier.com/entra/aadsts/50074/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50074/</guid><description>AADSTS50074 means MFA was required and the user did not pass the challenge. The password stage had already succeeded. One or two are normal. Many for one user in a short window from an unfamiliar IP is the MFA fatigue pattern: someone with the correct password is pushing prompts and waiting for an approval.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50076: MFA required to access the resource</title><link>https://brambrinkmeier.com/entra/aadsts/50076/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50076/</guid><description>AADSTS50076 means the password was accepted but the sign-in now needs multifactor authentication, usually because of a Conditional Access policy, per-user MFA, or a new location. It is an expected interrupt. The signal is who reached it: a 50076 from an IP that was just failing passwords means an attacker has a working password.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50079: User must register for MFA</title><link>https://brambrinkmeier.com/entra/aadsts/50079/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50079/</guid><description>AADSTS50079 means MFA is required but the user has not registered security info yet, so Entra ID sends them to register. For a real new user it is expected. If the sign-in came from an attacker IP, the attacker has a correct password and is being invited to register their own MFA method on the account.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50097: Device authentication required</title><link>https://brambrinkmeier.com/entra/aadsts/50097/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50097/</guid><description>AADSTS50097 means Microsoft Entra ID asked the client to prove the device&apos;s identity because a device-based Conditional Access policy applies. Managed clients answer it silently. Clients that can&apos;t prove a device identity stop here. A spike for one user from a new IP can mean a valid credential is being used on an unmanaged device.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50105: User not assigned to a role for the app</title><link>https://brambrinkmeier.com/entra/aadsts/50105/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50105/</guid><description>AADSTS50105 means the user signed in successfully but isn&apos;t assigned to the application, and the app has &quot;Assignment required&quot; set to Yes. That is least privilege working. Fix it by assigning the user or a group, not by switching assignment off. Watch for repeated 50105 on sensitive apps.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50125: Password reset registration interrupt</title><link>https://brambrinkmeier.com/entra/aadsts/50125/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50125/</guid><description>AADSTS50125 means sign-in was paused so the user could register for, or go through, self-service password reset. It is an expected interrupt and the password had already been accepted. If the sign-in came from an attacker IP, the attacker may be choosing the recovery details for the account.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50126: Invalid username or password</title><link>https://brambrinkmeier.com/entra/aadsts/50126/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50126/</guid><description>AADSTS50126 means Microsoft Entra ID rejected the username or password. A few per day are normal typos. The security signal is the shape: many accounts failing from one IP is password spraying, many failures on one account is brute force. Hunt it in SigninLogs with ResultType == &quot;50126&quot;.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50133: Session invalid after password change or expiry</title><link>https://brambrinkmeier.com/entra/aadsts/50133/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50133/</guid><description>AADSTS50133 means Microsoft Entra ID rejected an existing sign-in session because the user&apos;s password expired or was recently changed. It is normally a one-off after a password change. After a compromise, rows from IPs or devices the user doesn&apos;t own show where an old session was still in use. Hunt it in SigninLogs and AADNonInteractiveUserSignInLogs.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50140: Keep me signed in interrupt</title><link>https://brambrinkmeier.com/entra/aadsts/50140/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50140/</guid><description>AADSTS50140 is the &quot;Keep me signed in?&quot; prompt, logged as an interrupt. Microsoft calls it an expected part of the sign-in flow, so it is noise on failure dashboards. Its one investigative use: the prompt comes after authentication, so a 50140 from an attacker IP almost certainly means the password and any required MFA were accepted.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50158: External security challenge not satisfied</title><link>https://brambrinkmeier.com/entra/aadsts/50158/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50158/</guid><description>AADSTS50158 means the user was redirected to satisfy an extra requirement, such as terms of use or a third-party MFA provider, before sign-in could finish. Microsoft says the code alone does not indicate a failure. Read it like an MFA interrupt: from an attacker IP, it means the password worked and the external challenge is the remaining barrier.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS50173: Grant expired because it was revoked</title><link>https://brambrinkmeier.com/entra/aadsts/50173/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/50173/</guid><description>AADSTS50173 means a refresh token was rejected because it was issued before the user&apos;s TokensValidFrom date, usually after a password change, reset or admin session revocation. After an incident it is the row you want: each client still holding an old token, attacker included, fails with 50173 in AADNonInteractiveUserSignInLogs, exposing its IP and device.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS53000: Device not compliant</title><link>https://brambrinkmeier.com/entra/aadsts/53000/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/53000/</guid><description>AADSTS53000 means a Conditional Access policy requires a compliant device and the device signing in isn&apos;t compliant. The password was already accepted. Usually it is a user on a personal or unenrolled device. For a privileged account on a new device or IP, treat it as a valid credential in the wrong hands.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS53001: Device not domain joined</title><link>https://brambrinkmeier.com/entra/aadsts/53001/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/53001/</guid><description>AADSTS53001 means a Conditional Access policy requires a domain-joined (hybrid joined) device and the device signing in isn&apos;t one. The password was already accepted. Usually it is a user on a personal or cloud-only device. From an unknown device on an unfamiliar IP, it means a working credential is being used outside your estate.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS53003: Access blocked by Conditional Access</title><link>https://brambrinkmeier.com/entra/aadsts/53003/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/53003/</guid><description>AADSTS53003 means a Conditional Access policy blocked the sign-in or its grant controls weren&apos;t met. The password was already accepted, because Conditional Access only runs after the first factor succeeds. From an unknown IP or country, read it as a valid password in someone else&apos;s hands, stopped by policy. The ConditionalAccessPolicies column names the policy.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS65001: User or admin has not consented to the app</title><link>https://brambrinkmeier.com/entra/aadsts/65001/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/65001/</guid><description>AADSTS65001 means an app asked for a token for permissions that no user or admin has consented to. For a new or misconfigured app it is routine. The security angle is consent phishing: watch for an unfamiliar app that flips from 65001 to success, then check the audit log for &quot;Consent to application&quot; and IsAdminConsent.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS70043: Refresh token expired due to sign-in frequency checks</title><link>https://brambrinkmeier.com/entra/aadsts/70043/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/70043/</guid><description>AADSTS70043 means a refresh token was refused because a Conditional Access sign-in frequency policy says the user must authenticate again. It is the session control working as configured, so it is expected and has low attack value. Volume tracks how strict your policy is. Hunt it in AADNonInteractiveUserSignInLogs with ResultType == &quot;70043&quot;.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS90094: Administrator consent is required</title><link>https://brambrinkmeier.com/entra/aadsts/90094/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/90094/</guid><description>AADSTS90094 means a user tried to consent to an app, but the permissions it asks for need an administrator. Your user-consent restriction is holding. Usually it is a legitimate new app. The security signal is an unfamiliar app hitting 90094 for several users, which fits a consent-phishing attempt. Hunt it in SigninLogs by AppId.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS90095: Admin consent required, request access</title><link>https://brambrinkmeier.com/entra/aadsts/90095/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/90095/</guid><description>AADSTS90095 is an interrupt: a user hit a consent prompt for permissions that need an admin, and because the admin consent workflow is on, they are told to request approval. This is the recommended setup. The review queue becomes your consent-phishing triage queue. Hunt unfamiliar apps in SigninLogs with ResultType == &quot;90095&quot;.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS135011: Device used during authentication is disabled</title><link>https://brambrinkmeier.com/entra/aadsts/135011/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/135011/</guid><description>AADSTS135011 means the device used for the sign-in is disabled in Microsoft Entra ID. Usually an admin disabled it during cleanup or incident response, and something on that device still tries to get tokens. After an incident, these rows show where the quarantined device is and when it reconnects.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS500121: User didn&apos;t complete the MFA prompt</title><link>https://brambrinkmeier.com/entra/aadsts/500121/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/500121/</guid><description>AADSTS500121 means the user didn&apos;t complete the MFA prompt: it was denied, ignored, timed out, or MFA setup was unfinished. The password had already been accepted. A few are normal. Many for one user in a short window, especially from an unfamiliar IP, is the MFA fatigue pattern.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS530032: Blocked by a tenant security policy</title><link>https://brambrinkmeier.com/entra/aadsts/530032/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/530032/</guid><description>AADSTS530032 means a security policy set at the tenant level blocked the request, rather than a named Conditional Access policy. Microsoft&apos;s spray playbook lists it among events to review. Its sibling 530035 is the security defaults block, which legacy-auth sprays hit in tenants that use security defaults.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS700016: Application not found in the directory</title><link>https://brambrinkmeier.com/entra/aadsts/700016/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/700016/</guid><description>AADSTS700016 means the client application ID in the request isn&apos;t found in the tenant the request was sent to. It is almost always a developer error: wrong client ID, wrong tenant, or an app never added to the tenant. Unknown client IDs or a deleted malicious app still trying to sign in are worth a look.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS700082: The refresh token has expired due to inactivity</title><link>https://brambrinkmeier.com/entra/aadsts/700082/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/700082/</guid><description>AADSTS700082 means an app tried to use a refresh token that expired because nobody used it for too long. Microsoft calls it an expected part of the token lifecycle, so it has low attack value. One useful reading: a stolen refresh token that sat unused long enough fails here too. Hunt it in AADNonInteractiveUserSignInLogs with ResultType == &quot;700082&quot;.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>AADSTS7000215: Invalid client secret is provided</title><link>https://brambrinkmeier.com/entra/aadsts/7000215/</link><guid isPermaLink="true">https://brambrinkmeier.com/entra/aadsts/7000215/</guid><description>AADSTS7000215 means an app or service principal sent a client secret that Microsoft Entra ID didn&apos;t accept. Usually it is a developer or rotation mistake. The security signal is repeated failures for one app ID from an IP you don&apos;t own, which suggests someone trying a leaked or old secret. Hunt it in AADServicePrincipalSignInLogs.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>How to detect MFA fatigue (push bombing) in Microsoft Entra ID</title><link>https://brambrinkmeier.com/guides/detect-mfa-fatigue-entra-id/</link><guid isPermaLink="true">https://brambrinkmeier.com/guides/detect-mfa-fatigue-entra-id/</guid><description>Detect MFA fatigue in Entra ID: read 500121, 50074, 50076 and 50079, parse AuthenticationDetails with KQL, spot an approved prompt, and respond.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>How to detect password spraying in Microsoft Entra ID (with KQL)</title><link>https://brambrinkmeier.com/guides/detect-password-spray-entra-id/</link><guid isPermaLink="true">https://brambrinkmeier.com/guides/detect-password-spray-entra-id/</guid><description>Find password spraying in Entra ID sign-in logs: which AADSTS codes to read, how smart lockout behaves, four KQL queries, and how to respond.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>How to investigate consent phishing (illicit consent grants) in Entra ID</title><link>https://brambrinkmeier.com/guides/investigate-consent-phishing-entra-id/</link><guid isPermaLink="true">https://brambrinkmeier.com/guides/investigate-consent-phishing-entra-id/</guid><description>Find the consent event, read the sign-in codes around it, and remove an attacker&apos;s app from Entra ID. Why a password reset and MFA don&apos;t fix it.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item><item><title>After a compromise: revoke Entra ID sessions and prove it worked</title><link>https://brambrinkmeier.com/guides/revoke-sessions-and-verify-entra-id/</link><guid isPermaLink="true">https://brambrinkmeier.com/guides/revoke-sessions-and-verify-entra-id/</guid><description>Revoke a compromised user&apos;s Entra ID sessions, disable their devices, and use 50173, 50133 and 135011 sign-in rows to prove the attacker was cut off.</description><pubDate>Sun, 11 Oct 2026 00:00:00 GMT</pubDate></item></channel></rss>