Skip to content

docs(governance): require User.Read.All for Entra group access - #1242

Merged
andrewconnor-arcade merged 1 commit into
mainfrom
andrewconnor/group-access-entra-permissions
Oct 13, 2026
Merged

andrewconnor-arcade merged 1 commit into
mainfrom
andrewconnor/group-access-entra-permissions

Conversation

@andrewconnor-arcade

Copy link
Copy Markdown
Contributor

Summary

The group access page says an Entra ID backend needs only GroupMember.Read.All. With only that permission, Microsoft Graph refuses every user-centric membership lookup, so every gated tool is hidden from every caller, including group members. This changes the Entra section to require User.Read.All as well, and says what each permission is for.

What we saw

While setting up group access with the Entra backend for the Arcadia Wealth demo project, we granted GroupMember.Read.All (application, admin consent granted; the app's token carried roles: ["GroupMember.Read.All"]). A member of the required group was refused (tool_not_found) the same as an unknown user.

Probing Graph with the same app's credentials:

Call GroupMember.Read.All only plus User.Read.All
GET /users/{upn}/memberOf 403 200
GET /users/{objectId}/memberOf 403 200
GET /users/{objectId}/transitiveMemberOf 403 200
POST /users/{objectId}/checkMemberGroups 403 200

This matches Microsoft's docs for listing another user's memberships, which list no app-only path through GroupMember.Read.All.

After adding User.Read.All and waiting out the 5-minute membership cache, the group member's Math.Add call completed and an unknown user was still refused.

Change

  • The Entra ID app permissions section now lists both permissions in a table, with what breaks without each.
  • The warning callout now says neither permission is enough on its own. The old callout's point about User.Read.All alone returning IDs without names is kept in the table row for GroupMember.Read.All.

Draft until the end-to-end setup is fully confirmed.

🤖 Generated with Claude Code

The Entra backend needs User.Read.All as well as GroupMember.Read.All.
With GroupMember.Read.All alone, Microsoft Graph returns 403 for every
user-centric membership call (memberOf, transitiveMemberOf,
checkMemberGroups, by UPN or object ID), so every gated tool is hidden
from every caller. Document both permissions and what each is for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

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

Project Deployment Actions Updated
docs Ready Ready Preview Oct 13, 2026 12:22am UTC

Request Review

@andrewconnor-arcade
andrewconnor-arcade merged commit a3a53e8 into main Oct 13, 2026
9 checks passed
@andrewconnor-arcade
andrewconnor-arcade deleted the andrewconnor/group-access-entra-permissions branch October 13, 2026 01:49

This branch was successfully deployed

1 active deployment
Preview — 05beedbe Deployed Oct 13, 2026 by vercel[bot]
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