Skip to content

ENG-2766: Add isDisabled and web to Entra Graph $select fields#7734

Merged
dsill-ethyca merged 4 commits intomainfrom
ENG-2766-entra-graph-select
Mar 25, 2026
Merged

ENG-2766: Add isDisabled and web to Entra Graph $select fields#7734
dsill-ethyca merged 4 commits intomainfrom
ENG-2766-entra-graph-select

Conversation

@dsill-ethyca
Copy link
Copy Markdown
Contributor

Description of Changes

Adds isDisabled and web to the Microsoft Graph $select query for the Entra /applications endpoint.

isDisabled — Needed to detect deactivated app registrations. Maps to INACTIVE app_status in fidesplus, enabling the IDP monitor to filter out disabled apps (matching Okta's behavior).

web — Contains homePageUrl and redirectUris used by the Entra domain extractor to resolve vendor domains for Compass matching and Brandfetch logos. Without this field, domain extraction only works via LLM fallback.

Related PRs

  • fidesplus#3273 — ENG-2766: Entra monitor execution (consumes these fields)

Code Changes

  • src/fides/api/service/connectors/entra_http_client.py — Updated APPLICATIONS_SELECT constant

Steps to Confirm

  1. Configure an Entra connection with a mix of active and disabled apps
  2. Run an Entra IDP monitor scan
  3. Verify disabled apps (isDisabled: true) are filtered out
  4. Verify apps with web.homePageUrl have domains extracted

Pre-Merge Checklist

  • All CI checks passing
  • Corresponding fidesplus PR updated to use new fields

🤖 Generated with Claude Code

isDisabled is needed to detect deactivated apps (maps to INACTIVE
app_status). web is needed for domain extraction via homePageUrl.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown
Contributor

vercel bot commented Mar 23, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

2 Skipped Deployments
Project Deployment Actions Updated (UTC)
fides-plus-nightly Ignored Ignored Preview Mar 24, 2026 3:34pm
fides-privacy-center Ignored Ignored Mar 24, 2026 3:34pm

Request Review

dsill-ethyca and others added 2 commits March 23, 2026 16:13
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@dsill-ethyca dsill-ethyca marked this pull request as ready for review March 23, 2026 20:27
@dsill-ethyca dsill-ethyca requested a review from a team as a code owner March 23, 2026 20:27
@dsill-ethyca dsill-ethyca requested review from thabofletcher and removed request for a team March 23, 2026 20:27
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 23, 2026

Greptile Summary

This PR adds two fields — isDisabled and web — to the APPLICATIONS_SELECT constant used when querying the Microsoft Graph /applications endpoint. isDisabled enables detection of deactivated app registrations (to match Okta's INACTIVE status behavior in fidesplus), while web provides homePageUrl and redirectUris used by the Entra domain extractor for Compass matching and Brandfetch lookups.

  • web is a standard, well-documented property of the Microsoft Graph application resource type.
  • The comment on APPLICATIONS_SELECT was changed to reference only "IDP monitor discovery", but this constant also serves as the default select parameter in test_connection() (via _list_applications(top=1)) — a minor documentation gap.
  • No logic changes; the sole behavioral change is the expanded $select query sent to Microsoft Graph.

Confidence Score: 5/5

  • Safe to merge — the change is a small, targeted string constant update with only a minor comment inaccuracy.
  • The diff is minimal (one constant updated, one changelog entry added), both new fields are consumed by the companion fidesplus PR, and web is a documented Graph property. The only issue is a comment that no longer reflects the full usage of the constant. No logic, tests, or API contracts are broken.
  • No files require special attention.

Important Files Changed

Filename Overview
src/fides/api/service/connectors/entra_http_client.py Adds isDisabled and web to the APPLICATIONS_SELECT constant; the comment no longer reflects that this constant is also used in connection testing.
changelog/7734-entra-graph-select-fields.yaml Standard changelog entry for the PR — no issues.

Reviews (1): Last reviewed commit: "Fix ruff format: combine string literals..." | Re-trigger Greptile

Copy link
Copy Markdown

@claude claude bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change itself is minimal and well-structured — the existing tests import APPLICATIONS_SELECT by reference so they'll pick up the new fields without any changes needed there.

One concern worth investigating: isDisabled is a property on the servicePrincipal resource in Microsoft Graph v1.0, not the application resource. Querying /v1.0/applications with $select=isDisabled will likely result in that field being silently omitted from responses (Graph ignores unrecognized $select fields rather than erroring), meaning the downstream inactive-app filtering in fidesplus would silently do nothing.

The standard way to detect disabled app registrations in Entra is to query the corresponding servicePrincipal and check accountEnabled. If the author has confirmed isDisabled is actually populated in responses from this endpoint (e.g. via a real Entra tenant test), this concern is resolved — otherwise it may need a follow-up to use the correct field/endpoint.

The web field addition looks correct — it is a valid top-level property on the application resource and contains homePageUrl and redirectUris as described.

APPLICATIONS_SELECT = "id,appId,displayName,createdDateTime,description,signInAudience"
# $select fields for IDP monitor discovery
APPLICATIONS_SELECT = (
"id,appId,displayName,createdDateTime,description,signInAudience,isDisabled,web"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isDisabled is a property on the servicePrincipal resource in Microsoft Graph v1.0, not the application resource. The /v1.0/applications endpoint returns application objects, which don't have a top-level isDisabled field.

If you include an unrecognized $select field, Graph silently omits it from the response (no error), so this won't break anything — but isDisabled will always be absent from the returned objects and the downstream null-check / inactive filtering in fidesplus won't work as intended.

To check disabled state for app registrations you'd typically query the corresponding servicePrincipal via /v1.0/servicePrincipals?$filter=appId eq '<appId>'&$select=accountEnabled (the accountEnabled field on servicePrincipal is the canonical way to detect disabled apps in Entra).

Worth confirming you're seeing isDisabled populated in actual test runs against a real Entra tenant, or that this is a beta/preview field that works on this endpoint.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FYI isDisabled select works on an actual graph request

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@adamsachs adamsachs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@dsill-ethyca dsill-ethyca added this pull request to the merge queue Mar 25, 2026
Merged via the queue into main with commit f528475 Mar 25, 2026
57 checks passed
@dsill-ethyca dsill-ethyca deleted the ENG-2766-entra-graph-select branch March 25, 2026 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants