Date: 2026-01-28Documentation Index
Fetch the complete documentation index at: https://docs.encoreos.io/llms.txt
Use this file to discover all available pages before exploring further.
Research Method: Microsoft Learn MCP Server
Status: ✅ Research Complete
Executive Summary
Research confirms that Azure App Registration CAN be automated programmatically using Microsoft Graph API. This enables Encore Health OS to automatically provision Entra ID integration for organizations without manual Azure Portal steps.Key Findings
1. ✅ Programmatic App Registration is Possible
Microsoft Graph API Endpoint:- Delegated:
Application.ReadWrite.All(requires admin user) - Application:
Application.ReadWrite.OwnedByorApplication.ReadWrite.All
- ✅ Create application registration programmatically
- ✅ Generate client secret during creation (via
passwordCredentials) - ✅ Configure API permissions (
requiredResourceAccess) - ✅ Set redirect URIs, sign-in audience, etc.
id- Application object IDappId- Client ID (application ID)passwordCredentials[0].secretText- Client secret (only shown once!)
2. ⚠️ Admin Consent Requirements
Finding: Admin consent CAN be granted programmatically, but requires:- Privileged Role Administrator or Global Administrator role
- Microsoft Graph API to grant app roles:
- User with admin role calls Microsoft Graph API
- Grants permissions via
AppRoleAssignment.ReadWrite.All - Fully automated but requires admin user session
- Generate admin consent URL:
https://login.microsoftonline.com/{tenant}/adminconsent?client_id={appId} - Admin visits URL once to grant consent
- After consent, app can use application permissions
- Automate app registration
- Generate admin consent URL
- Store URL in organization settings
- Admin visits URL once to complete setup
- After consent, full automation enabled
3. Service Principal Creation
Finding: Service principal is automatically created when app registration is created. Microsoft Graph API:4. Permission Grant Programmatically
Application Permissions (App Roles):AppRoleAssignment.ReadWrite.All(delegated, requires admin)- Or use admin consent URL (one-time manual step)
5. Multi-Tenant Considerations
Finding: Each organization needs its own app registration in their Entra ID tenant. Architecture Options: Option 1: Per-Organization App Registration (Recommended)- Each organization has own app registration in their tenant
- Encore Health OS stores app credentials per organization
- Most secure, follows Microsoft best practices
- Requires organization admin to grant consent
- One app registration shared across all organizations
- Requires complex consent management
- Security concerns with shared credentials
- Not suitable for healthcare/PHI scenarios
Implementation Strategy
Phase 1: Automated App Registration
Workflow:- Organization admin enables Entra ID integration in Encore Health OS
- Encore Health OS calls Microsoft Graph API to create app registration
- App registration created with required permissions
- Client ID and secret stored in Supabase Vault (encrypted)
- Admin consent URL generated and displayed to admin
- Admin visits URL to grant consent
- After consent, integration is fully active
entra-register-app
- Creates app registration via Microsoft Graph
- Configures required permissions
- Generates client secret
- Returns admin consent URL
Phase 2: Admin Consent Flow
Option A: Automated (If Admin User Available)- Use admin user’s session to grant consent programmatically
- Requires admin to sign in to Encore Health OS with admin role
- Fully automated after initial admin sign-in
- Generate admin consent URL
- Display in UI with instructions
- Admin visits URL once
- After consent, integration active
Phase 3: User Provisioning
After App Registration Complete:- Use stored client ID and secret
- Authenticate via client credentials flow
- Create users via
POST /users - Assign licenses via
POST /users/{id}/assignLicense
Security Considerations
1. Credential Storage
- ✅ Store client secrets in Supabase Vault (encrypted)
- ✅ Never log secrets or expose in API responses
- ✅ Rotate secrets periodically (Microsoft Graph supports secret rotation)
2. Permission Scope
- ✅ Use least-privilege permissions
- ✅ Only request permissions actually needed
- ✅ Document why each permission is required
3. Admin Consent
- ⚠️ Admin consent grants powerful permissions
- ✅ Require explicit admin action (not automatic)
- ✅ Log all consent grants for audit trail
- ✅ Provide clear explanation of permissions requested
4. Multi-Tenant Isolation
- ✅ Each organization’s credentials isolated
- ✅ RLS policies enforce tenant isolation
- ✅ No cross-organization credential access
API Endpoints Required
App Registration
POST /applications- Create app registrationGET /applications/{id}- Get app detailsPATCH /applications/{id}- Update appDELETE /applications/{id}- Delete app
Service Principal
POST /servicePrincipals- Create service principal (usually auto-created)GET /servicePrincipals/{id}- Get service principalPOST /servicePrincipals/{id}/appRoleAssignedTo- Grant app role
Admin Consent
- Admin consent URL:
https://login.microsoftonline.com/{tenant}/adminconsent?client_id={appId} - Or programmatic:
POST /oauth2PermissionGrants(for delegated permissions)
User Provisioning (After Setup)
POST /users- Create userPOST /users/{id}/assignLicense- Assign licensePATCH /users/{id}- Update userDELETE /users/{id}- Delete user
Code Examples
Create App Registration with Secret
Generate Admin Consent URL
Grant Admin Consent Programmatically (If Admin User Available)
Limitations & Constraints
1. Admin Consent Required
- ⚠️ Cannot fully automate without admin user session
- ✅ Can automate app registration
- ✅ Can generate consent URL
- ⚠️ Admin must visit URL or grant via API (requires admin session)
2. Permission Requirements
- ⚠️ Creating app registrations requires
Application.ReadWrite.All - ⚠️ Granting app roles requires
AppRoleAssignment.ReadWrite.All - ✅ Both can be delegated permissions (admin user signs in)
- ⚠️ Or use admin consent URL (one-time manual step)
3. Secret Retrieval
- ⚠️ Client secret only shown once during creation
- ✅ Must store immediately in secure vault
- ⚠️ Cannot retrieve secret later (must create new one)
4. Multi-Tenant Complexity
- ⚠️ Each organization needs own app registration
- ✅ Can automate per organization
- ⚠️ Requires organization’s Entra ID tenant access
Recommendations
1. Hybrid Approach (Recommended)
- ✅ Automate app registration
- ✅ Generate admin consent URL
- ✅ Store credentials securely
- ⚠️ Require one-time admin consent (manual step)
- ✅ After consent, full automation enabled
2. User Experience Flow
- Org admin enables Entra ID integration in Encore Health OS
- Encore Health OS creates app registration automatically
- Display admin consent URL with clear instructions
- Admin visits URL and grants consent
- Integration active, user provisioning automated
3. Future Enhancement
- Add option for admin to sign in to Encore Health OS with admin role
- Use admin session to grant consent programmatically
- Fully automated flow (no manual URL visit)
References
Microsoft Learn Documentation
- Create Application API
- Grant Admin Consent Programmatically
- Grant API Permissions Programmatically
- Application Permissions
Related Encore Health OS Documentation
- Entra ID Gap Analysis (archived; superseded by PF-63 — see
docs/archive/integrations/ENTRA_ID_GAP_ANALYSIS.md) - Entra ID Implementation Summary
Document Version: 1.0
Last Updated: 2026-01-28
Research Method: Microsoft Learn MCP Server