Skip to content

Microsoft 365 Integration

Connect your Microsoft 365 tenant via the Microsoft Graph API to automatically collect user accounts, license information, email security posture, MFA enrollment, and Teams/Exchange activity data.

Integration Method: Uses Microsoft Graph API with OAuth 2.0 authentication and supports GDAP (Granular Delegated Admin Privileges) for MSP partners.

Microsoft 365 provides critical evidence for identity management, email security, and collaboration controls:

  • User Accounts - Complete directory of all M365 users
  • Account Status - Active, disabled, guest users, mailbox status
  • User Details - Display name, email, department, job title
  • Account Creation - When created, last modified, last sign-in
  • License Assignment - Which licenses assigned per user
  • MFA Enrollment Status - Enabled, enforced, or disabled per user
  • MFA Methods - Phone, authenticator app, FIDO2 keys
  • MFA Coverage - Percentage of users with MFA enabled
  • Conditional Access - Policy enforcement, device compliance
  • Authentication Methods - Registered methods per user
  • License Types - E3, E5, Business Premium, etc.
  • License Counts - Total purchased vs. assigned
  • License Utilization - Unused licenses (cost optimization)
  • Per-User Licensing - Which users have which licenses
  • Subscription Status - Active, trial, expired
  • Email Protection - Exchange Online Protection (EOP) status
  • Advanced Threat Protection - Defender for Office 365 features
  • Mailbox Audit - Audit logging enabled/disabled per mailbox
  • Retention Policies - Email retention and archiving
  • Anti-Spam/Malware - Protection policies in place
  • DMARC/SPF/DKIM - Email authentication status (if PowerDMARC integrated)
  • Microsoft 365 Groups - Group membership, owners
  • Teams - Active teams, members, channels
  • Distribution Lists - Email groups and memberships
  • Security Groups - Access control groups
  • Enrolled Devices - Intune-managed devices
  • Device Compliance - Compliant vs. non-compliant devices
  • Device Types - Windows, iOS, Android, macOS
  • Device Policies - Conditional access policies applied
  • Exchange Email Analysis - Work extraction from sent emails
  • Teams Message Analysis - Work done via Teams conversations
  • Communication Patterns - Customer touchpoints, response times
  • Sentiment Analysis - Communication tone and quality

Microsoft 365 data automatically satisfies these compliance controls:

Compliance FrameworkControls SatisfiedEvidence Provided
CIS Controls v8.15.1, 5.2, 5.3, 5.4, 6.1, 6.2, 16.1, 16.11Account management, access control, MFA, email security
NIST CSF 2.0ID.AM-2, PR.AC-1, PR.AC-7, PR.DS-5, DE.CM-1Software inventory, identity management, authentication, malware protection, monitoring
CMMC Level 2AC.1.001, AC.2.007, IA.1.076, IA.2.078, SC.2.179Access control, MFA, account management, external connections
HIPAA Security Rule164.308(a)(3), 164.308(a)(4), 164.312(a)(1), 164.312(d)Access management, workforce clearance, authentication, email encryption
SOC 2CC6.1, CC6.2, CC6.6, CC6.7, CC7.2User access controls, authentication, MFA, system monitoring
PCI DSS v4.07.1, 8.3, 8.4, 8.5Access control, MFA, authentication management

Control Requirement:

“Require multi-factor authentication for all administrative access”

Microsoft 365 Evidence:

✅ MFA Enrollment: 94% of users (47 of 50 users)
✅ Last Sync: 1 hour ago
✅ MFA Details:
- Admins with MFA: 5 of 5 (100%)
- Standard Users with MFA: 42 of 45 (93.3%)
- Users Without MFA: 3 (flagged for remediation)
- MFA Methods: Authenticator App (40), Phone (7)
- Conditional Access: Enforced for admin roles
✅ Gap Identified: 3 users need MFA enrollment
Status: PARTIALLY SATISFIED (94% coverage, 100% for admins)
Recommendation: Enroll remaining 3 users in MFA
  1. Log in to Azure Portal (https://portal.azure.com)
  2. Navigate to Azure Active DirectoryApp registrations
  3. Click New registration
  4. Configure application:
    • Name: “LanternOps Integration”
    • Supported account types: “Accounts in this organizational directory only”
    • Redirect URI: Web → https://lanternops.app/integrations/microsoft/callback
  5. Click Register
  6. Copy Application (client) ID (you’ll need this)
  7. Copy Directory (tenant) ID (you’ll need this)
  1. In your app registration, navigate to Certificates & secrets
  2. Click New client secret
  3. Configure secret:
    • Description: “LanternOps Integration Secret”
    • Expires: 24 months (recommended)
  4. Click Add
  5. Copy secret value immediately (shown only once!)
  1. In your app registration, navigate to API permissions
  2. Click Add a permission
  3. Select Microsoft Graph
  4. Select Application permissions (not delegated)
  5. Add these permissions:

Required Permissions:

User.Read.All - Read user profiles
Group.Read.All - Read groups and memberships
Directory.Read.All - Read directory data
Organization.Read.All - Read organization info
AuditLog.Read.All - Read audit logs
Policy.Read.All - Read conditional access policies
UserAuthenticationMethod.Read.All - Read MFA methods
Mail.Read - Read mailboxes (for communication intelligence)
MailboxSettings.Read - Read mailbox settings
Calendars.Read - Read calendar (for communication intelligence)
Team.ReadBasic.All - Read Teams metadata
  1. Click Add permissions
  2. Click Grant admin consent for [Your Organization]
  3. Verify all permissions show green checkmark
  1. Log in to LanternOps
  2. In the sidebar, click Integrations
  3. Click the Configure button next to Microsoft 365
  4. Click Add Customer Tenant
  5. Enter credentials:
    • Tenant Name: “Customer Name - Microsoft 365”
    • Tenant ID: [Paste from Step 1]
    • Domain: Primary domain (e.g., customer.onmicrosoft.com)
    • Client ID: [Paste from Step 1]
    • Client Secret: [Paste from Step 2]
    • Auth Mode: Select “Direct Tenant (SAM)” or “GDAP” for MSP partners
    • Customer: Map to existing customer in LanternOps
  6. Click the Save button
  7. Click the Test Connection button
  8. For OAuth flows: Click Authorize and sign in with appropriate admin account
  9. Grant permissions when prompted

Sync settings are managed through the Microsoft Graph sync tasks. The system automatically syncs:

Default Sync Entities:

  • Users - Active directory users and identities
  • Groups - Microsoft 365 Groups and security groups
  • Devices - Intune-managed devices (if applicable)
  • Licenses - Subscription and license assignments
  • Mail - Mailbox settings and email data (for Communication Intelligence)
  • Teams - Teams metadata and activity (for Communication Intelligence)

Sync Frequency: Every 1 hour (Graph API uses delta queries for efficiency)

Advanced Options: Configure specific endpoints to sync in the tenant settings:

  • Security Endpoints: Secure Score, Conditional Access policies
  • Compliance Endpoints: Audit logs, mailbox settings
  • Communication Intelligence: Email and Teams message harvesting

Sync runs automatically in background via Celery tasks.

  1. In the sidebar, click Integrations
  2. Click the Configure button next to Microsoft 365
  3. Navigate to the Sync Progress tab
  4. Select your customer tenant
  5. Click the Sync Now button (or select specific endpoints to sync)
  6. First sync takes 20-40 minutes (imports all users, groups, devices, licenses)
  7. Monitor progress on the Sync Progress page:
    • View sync status per endpoint
    • Check records synced count
    • Review any errors or warnings
  8. Verify data appears:
    • Check the customer tenant detail page
    • Review user count, license count, security score
    • Verify last sync timestamps are recent

Granular Delegated Admin Privileges (GDAP) is supported for MSP partners.

  1. Establish GDAP Relationship in Partner Center
  2. Ensure GDAP includes these roles:
    • Directory Readers (minimum)
    • Global Reader (recommended)
    • Reports Reader (for analytics)
  3. In LanternOps, configure integration with Customer Tenant ID
  4. Use MSP application credentials (not customer credentials)

Benefits:

  • ✅ Least-privilege access (more secure than DAP)
  • ✅ Time-limited delegated access
  • ✅ Audit trail of partner access
  • ✅ Granular role assignment

For MSPs managing multiple M365 tenants:

Setup Multiple Integrations:

  1. In the sidebar, click Integrations
  2. Click the Configure button next to Microsoft 365
  3. Click Add Customer Tenant
  4. Enter tenant-specific credentials (Tenant ID, Client ID, Secret)
  5. Map to specific LanternOps customer

Auto-Mapping:

  • LanternOps matches M365 tenant domain to customer domain
  • Example: acme.onmicrosoft.com → Customer “Acme Corporation”

Manual Mapping:

  • If auto-match fails, manually select customer from dropdown
  • Saved for future syncs

Default Frequency: Every 1 hour

Why Hourly?

  • User changes happen frequently (new hires, terminations)
  • Security events need fast detection (MFA disabled, new admin)
  • License changes require quick updates
  • Email security posture can shift rapidly

What Gets Synced Each Cycle:

Data TypeSync MethodRecords Updated
UsersIncremental (delta query)Only new/changed users
GroupsIncremental (delta query)Only new/changed groups
DevicesIncrementalOnly new/changed devices
LicensesFullAll subscriptions (lightweight)
MFA StatusIncrementalOnly changed enrollment status
MailboxesIncremental (delta query)Only new/modified mailboxes
Teams MessagesIncremental (delta query)Last 7 days only
Exchange EmailsIncremental (delta query)Last 7 days only

First Sync vs. Subsequent Syncs:

  • First Sync: 20-40 minutes (full tenant import)
  • Incremental Sync: 3-8 minutes (delta changes only)

Delta Query Optimization: Microsoft Graph delta queries ensure we only fetch changed data, reducing API calls by 90%+

Advanced feature for service delivery tracking.

Analyzes Exchange emails and Teams messages to automatically detect:

Work Extraction:

  • Customer support provided via email/Teams
  • Project work discussed in communications
  • Incidents handled through messaging
  • Time spent on customer communications

Pattern Detection:

  • Customer touchpoints per week
  • Response time to customer requests
  • Communication volume trends
  • Escalation patterns

Sentiment Analysis:

  • Positive/negative communication tone
  • Customer satisfaction signals
  • Relationship health indicators

Prerequisites:

  1. Microsoft 365 integration configured
  2. Communication Intelligence feature enabled in LanternOps plan
  3. Additional API permissions granted (see Step 3 above):
    • Mail.Read
    • Calendars.Read
    • Team.ReadBasic.All

Configuration:

  1. Navigate to Communication IntelligenceSettings
  2. Enable Exchange Email Harvesting
  3. Enable Teams Message Harvesting
  4. Set Harvest Frequency: Every 15 minutes (for real-time analysis)
  5. Configure Target Accounts: Select user mailboxes to monitor (e.g., support@, team leads)

Privacy Note: Only analyzes emails/messages sent to/from customers. Internal communications are excluded.

Webhook Support:

  • Microsoft Graph change notifications provide <5 minute latency
  • New customer emails trigger immediate analysis
  • Critical messages prioritized for AI analysis

Use Cases:

  • Prove customer support delivery in QBRs
  • Track work done that wasn’t ticketed (hidden revenue)
  • Identify customers needing attention (low communication = risk)
  • Demonstrate response time SLA compliance

Navigate to ETL Health Dashboard (/platform/etl/):

Healthy Sync Indicators:

  • 🟢 Status: Healthy
  • Failure Rate: <4%
  • ⏱️ Last Sync: Within last 1 hour
  • 📊 Records Synced: >0 users per sync

Cause: Invalid credentials or expired client secret

Solution:

  1. Verify Tenant ID, Client ID, and Client Secret are correct
  2. Check if Client Secret expired (Azure Portal → App Registration → Certificates & secrets)
  3. If expired, generate new secret and update in LanternOps
  4. Ensure Admin Consent granted for API permissions
  5. Try Re-authorize button in LanternOps

Cause: Missing API permissions or admin consent not granted

Solution:

  1. Navigate to Azure PortalApp RegistrationsAPI Permissions
  2. Verify all required permissions are listed (see Step 3 above)
  3. Click Grant admin consent button
  4. Verify all permissions show green checkmark (not gray)
  5. Wait 5 minutes for permissions to propagate
  6. Try sync again

Cause: Permissions issue or wrong tenant ID

Solution:

  1. Verify Tenant ID is correct (Azure Portal → Azure AD → Overview)
  2. Check API permission User.Read.All is granted
  3. Ensure Admin Consent granted (not just “Granted” but “Granted for [Org]”)
  4. Test with Microsoft Graph Explorer (https://developer.microsoft.com/graph/graph-explorer):
    • Sign in with admin account
    • Try query: GET https://graph.microsoft.com/v1.0/users
    • Should return user list
  5. If Graph Explorer works but LanternOps doesn’t, contact support

Cause: Client secret expired or app registration deleted

Solution:

  1. Check Azure PortalApp Registrations → verify app still exists
  2. Check Certificates & secrets → verify secret hasn’t expired
  3. If expired, generate new secret and update in LanternOps
  4. Click Re-authorize to refresh tokens

Cause: Too many API requests to Microsoft Graph (rare with delta queries)

Solution:

  • Automatic recovery: ETL system retries after 15 minutes
  • If persistent: Reduce sync frequency to every 2 hours (not recommended)
  • Best practice: Keep hourly sync but reduce scope (disable Teams/Exchange if not needed)

After first sync, verify:

  1. User Count Matches

    • Azure AD: Count active users
    • LanternOps: Navigate to IdentityUsers
    • Counts should match exactly
  2. MFA Status Accurate

    • Select several users in LanternOps
    • Check their MFA status
    • Verify matches Azure AD (Azure Portal → Users → MFA Status)
  3. License Data Present

    • Navigate to LicensingOverview
    • Should see all M365 subscriptions (E3, E5, etc.)
    • License counts should match Microsoft 365 Admin Center
  4. Groups Synced

    • Navigate to IdentityGroups
    • Verify groups appear
    • Check group memberships are correct

MFA Enrollment Tracking:

  • Real-time visibility into MFA coverage
  • Identify users without MFA (security risk)
  • Track MFA adoption over time
  • Prove access control for compliance

Example Customer Value:

“94% of your users have MFA enabled, protecting against 99.9% of account compromise attacks. We’ve identified 3 users who still need MFA - we’ll enroll them this week to achieve 100% coverage and full CMMC compliance.”

License Utilization:

  • Find unused licenses (assigned but never used)
  • Identify over-licensed users (E5 when E3 would suffice)
  • Calculate cost savings opportunity

Example:

License Audit Results:
✅ Total Licenses: 50
❌ Unused Licenses: 7 (never signed in)
💰 Cost: 7 × $23/month = $161/month wasted
💰 Annual Savings: $1,932 if licenses removed
Recommendation: Remove 7 unused licenses

Frameworks Covered:

  • CIS Controls (8 controls satisfied)
  • NIST CSF (5 controls satisfied)
  • CMMC Level 2 (5 controls satisfied)
  • HIPAA (4 controls satisfied)
  • SOC 2 (5 controls satisfied)
  • PCI DSS (4 controls satisfied)

Audit Package Includes:

  • User account inventory
  • MFA enrollment evidence
  • Access control policies
  • Email security configuration
  • Audit logging status
  • Evidence timestamps

Microsoft 365 data powers automatic opportunity detection:

MFA Gaps:

  • Find users without MFA
  • Upsell: “MFA enrollment service - $500 one-time”

License Optimization:

  • Unused licenses → Cost savings proposal
  • Under-licensed users → Upgrade recommendation
  • Missing features → Upsell E3 to E5

Security Gaps:

  • No Advanced Threat Protection → Upsell Defender for Office 365
  • No email encryption → Recommend compliance add-ons
  • Guest user sprawl → Identity governance service

Communication Intelligence:

  • Prove hidden work delivered (not in tickets)
  • Demonstrate value in QBRs
  • Find customers needing attention (low communication = churn risk)

Average Revenue Found: $2,000-$5,000 per customer

  • ✅ Use Application permissions (not delegated) for background sync
  • ✅ Grant all required permissions before first sync
  • ✅ Use long-lived client secret (24 months) to avoid frequent rotation
  • ✅ For MSPs: Use GDAP instead of legacy DAP
  • ✅ Review MFA Dashboard weekly
  • ✅ Check license utilization monthly
  • ✅ Monitor ETL Health Dashboard for sync issues
  • ✅ Rotate client secret before expiration (set calendar reminder)
  • ✅ Credentials are encrypted at rest (AES-256)
  • ✅ Never shared across MSP tenants
  • ✅ Use read-only permissions (LanternOps never writes to M365)
  • ✅ Enable conditional access for admin accounts in Azure AD
  • ✅ Keep sync frequency at 1 hour for fresh data
  • ✅ Use delta queries to minimize API calls (enabled by default)
  • ✅ First sync during off-hours (takes 20-40 minutes)
  • ✅ Monitor failure rate (should be <4%)

Core Identity & Access:

  • User.Read.All - Read all users
  • Group.Read.All - Read all groups
  • Directory.Read.All - Read directory data
  • Organization.Read.All - Read org settings

Security & Compliance:

  • AuditLog.Read.All - Read audit logs
  • Policy.Read.All - Read conditional access
  • UserAuthenticationMethod.Read.All - Read MFA status

Communication Intelligence (Optional):

  • Mail.Read - Read mailboxes
  • MailboxSettings.Read - Read mailbox settings
  • Calendars.Read - Read calendars
  • Team.ReadBasic.All - Read Teams metadata

Permission Type: Application (not Delegated)

Admin Consent Required: Yes (Global Administrator)

  1. Verify User Data

    • Check IdentityUsers
    • Confirm user counts and MFA status
    • Review license assignments
  2. Set Up MFA Monitoring

    • Navigate to SecurityMFA Dashboard
    • Review coverage percentage
    • Identify users needing MFA enrollment
  3. Enable Communication Intelligence (Optional)

  4. Generate Compliance Evidence

    • Navigate to ComplianceAudit Packages
    • Select framework (e.g., CMMC, HIPAA)
    • See M365 evidence for identity/access controls