Microsoft Entra ID¶
Examples for working with Microsoft Entra ID (formerly Azure AD) via the Microsoft Graph API — users, groups, applications, service principals, directory roles, policies, and audit logs.
Prerequisites¶
| Requirement | Description | Reference |
|---|---|---|
User.Read.All |
Read user profiles and directory data | User permissions |
User.ReadWrite.All |
Update users, reset passwords, manage licenses | User permissions |
User.Invite.All |
Invite guest users (B2B) | User Invite permissions |
Group.Read.All |
Read group members and properties | Group permissions |
Group.ReadWrite.All |
Create, manage, and delete groups | Group permissions |
Application.Read.All |
Read app registrations | Application permissions |
Application.ReadWrite.All |
Register and manage applications | Application permissions |
AppRoleAssignment.ReadWrite.All |
Grant and revoke API permissions | AppRoleAssignment permissions |
RoleManagement.ReadWrite.Directory |
Read and assign directory roles | RoleManagement permissions |
Policy.Read.All |
Read tenant policies | Policy permissions |
IdentityProvider.Read.All |
Read identity providers (SAML, social) | IdentityProvider permissions |
AuditLog.Read.All |
Read sign-in logs and audit logs | AuditLog permissions |
IdentityRiskyUser.Read.All |
Read risky users and risk detections | Identity Protection permissions |
AccessReview.Read.All |
Read access reviews history | Access review permissions |
Domain.ReadWrite.All |
Add and verify custom domains | Domain permissions |
UserAuthenticationMethod.Read.All |
Read registered MFA,FIDO2,passwordless methods | Authentication methods permissions |
Admin consent is required for most permissions above.
How Entra ID is organized¶
flowchart LR
A[Tenant] --> B[Users]
A --> C[Groups]
A --> D[Applications / Service Principals]
A --> E[Directory Roles]
A --> F[Policies]
A --> G[Identity Providers]
A --> H[Audit Logs]
The Entra ID Graph API covers identity and access management — users, groups, app registrations, service principals, role assignments, tenant-level policies, and audit logs.
Examples — Users¶
| Operation | File | Required role | API reference |
|---|---|---|---|
| Import users from CSV | users/import.py |
User.ReadWrite.All |
create user |
| Get total user count | users/get_count.py |
User.Read.All |
get user |
| Get disabled user accounts | users/get_disabled.py |
User.Read.All |
list users |
| Get users with expired passwords | users/password_expiry_report.py |
User.Read.All |
list users |
| Get user's recent activities | users/get_my_activities.py |
User.Read.All |
activities |
| Update a user's profile | users/update.py |
User.ReadWrite.All |
update user |
| Update users in batch | users/update_batch.py |
User.ReadWrite.All |
update user |
| Reset a user's password | users/reset_password.py |
User.ReadWrite.All |
reset password |
| Assign a manager to a user | users/assign_manager.py |
User.ReadWrite.All |
update manager |
| Get a user's manager | users/get_manager.py |
User.Read.All |
get manager |
| Disable MFA for a user | users/disable_mfa.py |
User.ReadWrite.All |
update authentication |
| Get assigned licenses | licenses/get_licenses.py |
User.Read.All |
get license |
| Assign a license to a user | licenses/assign.py |
User.ReadWrite.All |
assign license |
| Export users to file | users/export.py |
User.Read.All |
list users |
| Export personal data (GDPR) | users/export_personal_data.py |
User.Read.All |
export data |
| List app role assignments | users/list_app_role_assignments.py |
User.Read.All |
app role assignments |
| Create a user | users/create.py |
User.ReadWrite.All |
create user |
| Delete a user | users/delete.py |
User.ReadWrite.All |
delete user |
| Get user's group memberships | users/get_group_memberships.py |
User.Read.All |
memberOf |
| Invite a guest (B2B) user | users/invite_guest.py |
User.Invite.All |
invitation |
| User report — sign-in activity, inactive, no MFA | users/report.py |
User.Read.All, AuditLog.Read.All |
user list |
| MFA status report — users without strong auth registered | users/mfa_status_report.py |
UserAuthenticationMethod.Read.All |
auth methods |
| Last sign-in report — users without recent sign-in | users/last_signin_report.py |
User.Read.All, AuditLog.Read.All |
signInActivity |
| Find inactive guest accounts | users/find_inactive_guests.py |
User.Read.All, AuditLog.Read.All |
user list |
| Break-glass account audit — CA exclusions, permanent Global Admins | users/break_glass_report.py |
Policy.Read.All, RoleManagement.Read.All |
CA policies |
| Bulk assign licenses from CSV | licenses/bulk_assign_license.py |
User.ReadWrite.All |
assign license |
Examples — Groups¶
| Operation | File | Required role | API reference |
|---|---|---|---|
| Create a Microsoft 365 group | groups/create_m365.py |
Group.ReadWrite.All |
create group |
| Create a security group | groups/create_security.py |
Group.ReadWrite.All |
create group |
| Create a group with a team | groups/create_with_team.py |
Group.ReadWrite.All |
create group |
| Update group properties | groups/update_group.py |
Group.ReadWrite.All |
update group |
| List all groups | groups/list.py |
Group.ReadWrite.All |
list groups |
| List group members | groups/list_members.py |
Group.Read.All |
list members |
| Add/remove group members | groups/add_member.py |
Group.ReadWrite.All |
group members |
| Add/remove group owners | groups/add_owner.py |
Group.ReadWrite.All |
group owners |
| List group owners | groups/list_owners.py |
Group.Read.All |
list owners |
| Delete groups by name | groups/delete_groups.py |
Group.ReadWrite.All |
delete group |
| Delete groups in batch | groups/delete_batch.py |
Group.ReadWrite.All |
delete group |
| Export groups to CSV | groups/export_csv.py |
Group.Read.All |
list groups |
| Group lifecycle — owners, members, orphans | groups/manage.py |
Group.Read.All, User.Read.All |
group list |
| Find orphaned groups — no owners or members | groups/find_orphans.py |
Group.Read.All, User.Read.All |
group list |
| Group lifecycle policies | groups/lifecycle_policies.py |
GroupLifecyclePolicy.ReadWrite.All |
lifecycle policy |
| Group membership changes audit — who was added/removed | audit/group_membership_changes.py |
AuditLog.Read.All |
directory audit |
Examples — Applications¶
| Operation | File | Required role | API reference |
|---|---|---|---|
| Register a new application | applications/create.py |
Application.ReadWrite.All |
create app |
| List all applications | applications/list.py |
Application.Read.All |
list apps |
| Get an application by client ID | applications/get_by_app_id.py |
Application.ReadWrite.All |
get application |
| Add a certificate to an app | applications/rotate_cert.py |
Application.ReadWrite.All |
add certificate |
| Add a client secret (password) | applications/rotate_secret.py |
Application.ReadWrite.All |
add password |
| Check application permissions | applications/has_application_perms.py |
AppRoleAssignment.ReadWrite.All |
app permissions |
| Check delegated permissions | applications/has_delegated_perms.py |
AppRoleAssignment.ReadWrite.All |
delegated perms |
| List application permissions | applications/list_application_perms.py |
AppRoleAssignment.ReadWrite.All |
list app perms |
| List delegated permissions | applications/list_delegated_perms.py |
AppRoleAssignment.ReadWrite.All |
list delegated |
| Grant application permissions | applications/grant_application_perms.py |
AppRoleAssignment.ReadWrite.All |
grant |
| Grant delegated permissions | applications/grant_delegated_perms.py |
AppRoleAssignment.ReadWrite.All |
grant |
| Revoke application permissions | applications/revoke_application_perms.py |
AppRoleAssignment.ReadWrite.All |
revoke |
| Revoke delegated permissions | applications/revoke_delegated_perms.py |
AppRoleAssignment.ReadWrite.All |
revoke |
| Service principal report — apps, perms, expiring secrets | applications/sp_report.py |
Application.Read.All |
SP list |
| App secret expiry report — certs/passwords expiring soon | applications/credentials_report.py |
Application.Read.All |
app credentials |
| OAuth consent grants — review delegated permissions per app | applications/consent_grants.py |
DelegatedPermissionGrant.Read.All |
consent grants |
| Find orphaned apps — registrations/SPs without owners | applications/find_orphans.py |
Application.Read.All |
app list |
Examples — Roles & Identity¶
| Operation | File | Required role | API reference |
|---|---|---|---|
| List directory roles | roles/list.py |
RoleManagement.ReadWrite.Directory |
list roles |
| Get roles assigned to a user | roles/for_user.py |
RoleManagement.ReadWrite.Directory |
user roles |
| Assign a role to a user | roles/assign_role.py |
RoleManagement.ReadWrite.Directory |
assign role |
| List identity providers | identity/list_provider.py |
IdentityProvider.Read.All |
list providers |
| List named locations | identity/list_named_locations.py |
Policy.Read.All |
namedLocation list |
| List conditional access policies | identity/list_conditional_access_policies.py |
Policy.Read.All |
conditionalAccessPolicy list |
| List self-service sign-up user flows | identity/list_user_flows.py |
IdentityUserFlow.Read.All |
b2xUserFlows list |
| PIM report — privileged role assignments | roles/pim_report.py |
RoleManagement.Read.All |
role assignments |
Examples — Policies¶
| Operation | File | Required role | API reference |
|---|---|---|---|
| Get authorization policy | policies/get_auth_settings.py |
Policy.Read.All |
auth policy |
| List Conditional Access policies | policies/conditional_access/list.py |
Policy.Read.All |
list CA policies |
| Get authentication methods policy | policies/authentication_methods.py |
Policy.Read.All |
auth methods |
| Get admin consent request policy | policies/admin_consent_request.py |
Policy.Read.All |
admin consent |
| Get device registration policy | policies/device_registration.py |
Policy.Read.All |
device reg |
| Get cross-tenant access policy | policies/cross_tenant_access.py |
Policy.Read.All |
cross-tenant |
| CA policy report — break-glass accounts, enforcement state | policies/conditional_access/list.py |
Policy.Read.All |
CA policy list |
| Stale device report — devices without recent sign-in | devices/stale_report.py |
Device.Read.All |
device list |
Examples — Audit Logs¶
| Operation | File | Required role | API reference |
|---|---|---|---|
| List user sign-in logs | audit/list_signins.py |
AuditLog.Read.All |
list signins |
| Risky users — Identity Protection review, risk detections, dismiss / confirm-compromise | protection/risky_users.py |
IdentityRiskyUser.Read.All, IdentityRiskDetection.Read.All |
risky users |
| Access reviews — history definitions, instances, decisions, compliance reporting | governance/access_reviews.py |
AccessReview.Read.All |
access reviews |
| Domain management — add, verify DNS, check service records | domains/manage.py |
Domain.ReadWrite.All |
domains API |
| Auth methods — tenant MFA/passwordless readiness, per-user methods (FIDO2, phone, Authenticator) | users/auth_methods.py |
UserAuthenticationMethod.Read.All, AuditLog.Read.All |
auth methods overview |
| Security alerts — list, filter, triage M365 Defender alerts, update classification/status | security/alerts.py |
SecurityAlert.ReadWrite.All |
security alerts |
| Change notifications — subscribe to Graph webhooks, manage subscription lifecycle | governance/change_notifications.py |
Depends on resource | subscriptions |
| Terms of use — list agreements, track user acceptances, compliance check | governance/terms_of_use.py |
Agreement.Read.All |
agreements |
Quick start¶
from office365.graph_client import GraphClient
client = GraphClient(tenant="contoso.onmicrosoft.com").with_client_secret(
"client_id", "client_secret"
)
# List all users
users = client.users.top(10).get().execute_query()
for user in users:
print(f"{user.user_principal_name:40s} {user.display_name}")