Microsoft Entra ID (formerly Azure AD) · Authentication Profile

Azure Ad Authentication

Authentication

Microsoft Entra ID (formerly Azure AD) secures its APIs with oauth2 and openIdConnect across 3 declared security schemes, as derived from its OpenAPI definitions. OAuth 2.0 is offered via the authorizationCode, clientCredentials, and deviceCode flow(s).

AuthenticationAuthorizationIdentityOpenID ConnectSingle Sign-On
Methods: oauth2, openIdConnect Schemes: 3 OAuth flows: authorizationCode, clientCredentials, deviceCode API key in:

Security Schemes

azureaadv2 oauth2
· flows: authorizationCode, clientCredentials, deviceCode
openIdConnect openIdConnect
mutualTLS mutualTLS

Source

Authentication Profile

Raw ↑
generated: '2026-09-06'
method: searched
source: >-
  https://learn.microsoft.com/en-us/graph/auth/ ,
  https://learn.microsoft.com/en-us/entra/identity-platform/v2-overview ,
  https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
  (fetched 200, saved at well-known/azure-ad-openid-configuration.json), and the
  azureaadv2 securityScheme declared in every harvested spec under
  openapi/_original/
provider: Azure Active Directory (Microsoft Entra ID)
providerId: azure-ad
supersedes: >-
  The 2026-07-11 derived file, whose endpoints came from a hand-written scaffold
  spec rather than from the provider's own discovery document.
summary:
  types:
    - oauth2
    - openIdConnect
  oauth2_flows:
    - authorizationCode
    - clientCredentials
    - deviceCode
  api_keys: false
  basic_auth: false
  mtls: true
  note: >-
    Microsoft Graph accepts no API key and no basic auth. Every request carries an
    OAuth 2.0 bearer token issued by the Microsoft identity platform v2.0
    endpoint. An anonymous request to graph.microsoft.com returns 401
    InvalidAuthenticationToken — verified live on 2026-09-06.
schemes:
  - name: azureaadv2
    type: oauth2
    description: Microsoft identity platform v2.0 (Microsoft Entra ID)
    declared_in: every spec in openapi/_original/azure-ad-graph-*.yml
    applied: global `security` requirement on each document
    flows:
      - flow: authorizationCode
        authorizationUrl: https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
        tokenUrl: https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
        permission_set: delegated
        pkce: required for public clients
        description: >-
          The app acts on behalf of a signed-in user. Effective access is the
          INTERSECTION of the granted scope and the user's own directory
          privileges — a token carrying User.ReadWrite.All still cannot edit a
          user the signed-in principal has no rights over.
      - flow: clientCredentials
        tokenUrl: https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
        permission_set: application
        scope_parameter: https://graph.microsoft.com/.default
        description: >-
          The app acts as itself, with no user context. Admin consent is always
          required and access is tenant-wide, bounded only by the granted
          application permissions. This is the daemon/agent path.
        client_authentication:
          - client_secret_post
          - client_secret_basic
          - private_key_jwt
          - self_signed_tls_client_auth
        note: >-
          token_endpoint_auth_methods_supported read verbatim from the discovery
          document. private_key_jwt (certificate credentials) and federated
          identity credentials are the recommended alternatives to a shared
          secret for unattended workloads.
      - flow: deviceCode
        deviceAuthorizationUrl: https://login.microsoftonline.com/{tenant}/oauth2/v2.0/devicecode
        tokenUrl: https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
        permission_set: delegated
        description: RFC 8628 device authorization grant, for input-constrained clients.
  - name: openIdConnect
    type: openIdConnect
    openIdConnectUrl: https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
    description: >-
      Full OpenID Connect provider. Discovery returns issuer
      https://login.microsoftonline.com/{tenantid}/v2.0, jwks_uri
      https://login.microsoftonline.com/common/discovery/v2.0/keys, userinfo at
      https://graph.microsoft.com/oidc/userinfo, RS256 id_token signing and
      pairwise subject identifiers.
  - name: mutualTLS
    type: mutualTLS
    description: >-
      self_signed_tls_client_auth is advertised in
      token_endpoint_auth_methods_supported — client certificates may
      authenticate at the token endpoint. Not a transport-level mTLS requirement
      on graph.microsoft.com itself.
token:
  transport: 'Authorization: Bearer <token>'
  format: JWT
  signing_alg: RS256
  jwks_uri: https://login.microsoftonline.com/common/discovery/v2.0/keys
  audience: https://graph.microsoft.com
  issuer_template: https://login.microsoftonline.com/{tenantid}/v2.0
  subject_type: pairwise
  claims_supported:
    - sub
    - iss
    - aud
    - exp
    - iat
    - auth_time
    - acr
    - nonce
    - preferred_username
    - name
    - tid
    - ver
    - at_hash
    - c_hash
    - email
    - cloud_instance_name
    - cloud_instance_host_name
    - cloud_graph_host_name
    - msgraph_host
  note: >-
    Graph access tokens are opaque to third parties by contract — Microsoft
    documents that only the resource may validate them, and the token format can
    change. Do not parse a Graph access token in client code.
tenant_segment:
  values:
    - '{tenantId} — a single tenant'
    - common — work, school or personal Microsoft accounts
    - organizations — work or school accounts only
    - consumers — personal Microsoft accounts only
  note: >-
    The tenant segment in the authority URL is part of the security boundary, not
    a routing convenience. The Microsoft MCP Server for Enterprise names
    https://login.microsoftonline.com/organizations/v2.0 specifically.
authorization:
  model: OAuth scopes + directory roles + Conditional Access
  scopes: scopes/azure-ad-scopes.yml
  conditional_access_note: >-
    A Conditional Access policy can refuse an otherwise valid token with
    HTTP 403 and `error=insufficient_claims`. A client must handle the claims
    challenge and re-authenticate; retrying the same token will never succeed.
  docs: https://learn.microsoft.com/en-us/entra/identity-platform/v2-conditional-access-dev-guide
verification:
  probed: '2026-09-06'
  anonymous_request: https://graph.microsoft.com/v1.0/users
  http_status: 401
  error_code: InvalidAuthenticationToken
docs: https://learn.microsoft.com/en-us/graph/auth/

Work with this as data

Every security artifact here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for security posture

4 MCP tools reach this
  • find_securityBrowse and filter every security artifact in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This security artifact
curl "https://apis.io/api/v1/security/azure-ad-authentication"
All security posture
curl "https://apis.io/api/v1/security?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.