Reference

Authentication User Credentials


Description

Use delegated access (User Credentials) whenever you want to let a signed-in user work with their own resources or resources they can access. Whether it's an admin setting up policies for their entire organization or a user deleting an email in their inbox, all scenarios involving user actions should use delegated access. [API reference]

Instructions

Follow these simple steps below to create Microsoft Entra ID application with delegated access:

WARNING: If you are planning to automate processes, we recommend that you use a Application Credentials authentication method. In case, you still need to use User Credentials, then make sure you use a system/generic account (e.g. automation@my-company.com). When you use a personal account which is tied to a specific employee profile and that employee leaves the company, the token may become invalid and any automated processes using that token will start to fail.
  1. Navigate to the Azure Portal and log in using your credentials.
  2. Access Microsoft Entra ID.
  3. Register a new application by going to App registrations and clicking on New registration button:

    Start new app registration in Microsoft Entra ID
    INFO: Find more information on how to register an application in Graph API reference.
  4. When configuration window opens, configure these fields:

    • Supported account type
      • Use Accounts in this organizational directory only, if you need access to data in your organization only.
    • Redirect URI:
      • Set the type to Public client/native (mobile & desktop).
      • Use https://zappysys.com/oauth as the URL.
    Register app in Microsoft Entra ID
  5. After registering the app, copy the Application (client) ID for later:

    Copy client ID of Microsoft Entra ID app
  6. Then copy OAuth authorization endpoint (v2) & OAuth token endpoint (v2) URLs to use later in the configuration:

    Copy Auth and Token URLs in Microsoft Entra ID app
  7. Now go to SSIS package or ODBC data source and use the copied values in User Credentials authentication configuration:

    • In the Authorization URL field paste the OAuth authorization endpoint (v2) URL value you copied in the previous step.
    • In the Token URL field paste the OAuth token endpoint (v2) URL value you copied in the previous step.
    • In the Client ID field paste the Application (client) ID value you copied in the previous step.
    • In the Permissions (Scope) field use the default or pick labeled permissions. [System] covers sign-in and refresh token. [User] is the signed-in user’s mailbox (use Mail.ReadBasic or Mail.Read for read-only). [Shared] adds shared or delegated mail folders. [Tenant] entries (User.ReadBasic.All, User.Read.All, Group.Read.All) are broad directory permissions that usually need an administrator to approve the app. The default includes User.ReadBasic.All for the Default User Id drop down; add User.Read.All only if you need full user profiles (not required for listing users).
      • offline_access, openid, profile, email
      • User.Read, Mail.ReadBasic, Mail.Read, Mail.ReadWrite, Mail.Send
      • Mail.Read.Shared, Mail.ReadBasic.Shared, Mail.ReadWrite.Shared, Mail.Send.Shared
      • User.ReadBasic.All, Group.Read.All (often admin consent; user drop down / group lookups)
      • User.Read.All (optional — full user profiles; broader than needed for user drop down)
      Admin consent note:
      • Token generation can still ask for admin approval, even when delegated scopes are listed in API permissions.
      • A Global Administrator can allow user consent for selected low-impact delegated permissions.
      • Broad mail or directory scopes such as Mail.ReadWrite, User.ReadBasic.All, User.Read.All, and Group.Read.All may still require admin consent.
      Settings: User consent settings (Entra ID > Enterprise apps > Consent and permissions > User consent settings). Docs: configure user consent, recommended settings.
  8. Press Generate Token button to generate Access and Refresh Tokens.
  9. Choose Default User Id from the drop down menu after token generation. This calls GET /users and requires User.ReadBasic.All in your token (included in the default scope list). Regenerate the token if you add or remove this scope later. Keep me for your own mailbox, or pick another user when accessing a shared or delegated mailbox. You can also type a user id or email manually if listing fails.

  10. Click Test Connection to confirm the connection is working.
  11. Done! Now you are ready to use the API Connector!

Parameters

Parameter Required Default value Options
Name: AuthUrl

Label: Authorization URL

YES
Name Value
For Single-Tenant Use https://login.microsoftonline.com/{ENTER-TENANT-ID-HERE}/oauth2/v2.0/authorize
For Multi-Tenant Use https://login.microsoftonline.com/common/oauth2/v2.0/authorize
Name: TokenUrl

Label: Token URL

YES
Name Value
For Single-Tenant Use https://login.microsoftonline.com/{ENTER-TENANT-ID-HERE}/oauth2/v2.0/token
For Multi-Tenant Use https://login.microsoftonline.com/common/oauth2/v2.0/token
Name: ClientId

Label: Application (client) ID

YES
Name: Scope

Label: Permissions (Scope)

Microsoft Graph delegated scopes for Outlook/Mail. [System] = sign-in and refresh token (offline_access). [User] = signed-in user mailbox and profile (lower impact for read-only: Mail.ReadBasic or Mail.Read). [Shared] = same plus shared or delegated folders (work or school accounts). [Tenant] = directory-wide (.All) permissions that Microsoft documents as typically requiring admin consent: User.ReadBasic.All, User.Read.All, Group.Read.All. Default includes User.ReadBasic.All for the Default User Id drop down (GET /users). Add User.Read.All only when you need full user profiles (broader; more likely to need admin consent). Remove User.ReadBasic.All and Group.Read.All from the default if you only access your own mailbox (User Id = me). Exact consent still depends on tenant user-consent settings. See permissions reference.
YES offline_access~email~Mail.Read~Mail.Read.Shared~Mail.ReadBasic~Mail.ReadBasic.Shared~openid~profile~User.Read~User.ReadBasic.All~Group.Read.All~Mail.ReadWrite~Mail.ReadWrite.Shared~Mail.Send~Mail.Send.Shared
Name Value
[System] Automatic re-auth (recommended) offline_access
[System] OpenID (sign-in) openid
[System] Profile (basic info) profile
[System] Email (address in token) email
[User] Basic user profile User.Read
[User] Read mail basic only (no message body or attachments) Mail.ReadBasic
[User] Read mail (own mailbox) Mail.Read
[User] Read/write mail (own mailbox) Mail.ReadWrite
[User] Send mail (as signed-in user) Mail.Send
[Shared] Read mail (own + shared or delegated folders) Mail.Read.Shared
[Shared] Read mail basic (shared/delegated, no body or attachments) Mail.ReadBasic.Shared
[Shared] Read/write mail (own + shared or delegated folders) Mail.ReadWrite.Shared
[Shared] Send mail (shared or delegated mailboxes) Mail.Send.Shared
[Tenant] Read all users basic profile (typically needs admin consent) User.ReadBasic.All
[Tenant] Read all users full profile (typically needs admin consent) User.Read.All
[Tenant] Read all groups (typically needs admin consent) Group.Read.All
Name: ReturnUrl

Label: Return URL

YES https://zappysys.com/oauth
Name Value
https://zappysys.com/oauth https://zappysys.com/oauth
Name: ClientSecret

Label: Client Secret

Name: RefreshTokenFilePath

Label: Refresh Token File Path

If you cant fit long refresh token in ConnectionString from your program then use this. Supply three properties in json format (i.e. save this in file { "access_token": "YOUR_ACCESS_TOKEN", "refresh_token": "YOUR_REFRESH_TOKEN", "expires_in": 3600 } )
Name: ExtraAttributesForAuthRequest

Label: Login Prompt Option

Choose this if you want to force login prompt or permission prompt.
Name Value
None
Force login prompt prompt=login
Force permission select prompt=consent
Name: UserId

Label: Default User Id (Select after clicking **Generate Token**)

The Microsoft Mail user ID GUID or email address for the account to read messages from. (Examples: '4ff54a77-9c09-4274-958f-83bdc0a53900' or 'first.last@domain.com'). To populate this drop down (GET /users), User Credentials need User.ReadBasic.All delegated scope (in the default list; regenerate token after adding). Add User.Read.All only if you need full user profiles. Application Credentials need User.Read.All application permission with admin consent in Azure Portal. You can also type a user id or email manually if listing fails.
me
Name: RetryMode

Label: RetryMode

RetryWhenStatusCodeMatch
Name Value
None None
RetryAny RetryAny
RetryWhenStatusCodeMatch RetryWhenStatusCodeMatch
Name: RetryStatusCodeList

Label: RetryStatusCodeList

429|503
Name: RetryCountMax

Label: RetryCountMax

5
Name: RetryMultiplyWaitTime

Label: RetryMultiplyWaitTime

True