# Authentication flow for Service Principal using OAuth2 Client Credentials ## Store credentials for SPN A ```{mermaid} sequenceDiagram actor Admin participant Secret Client (SPN A) participant Entra participant DQ API (SPN B) participant Database Admin ->> Entra: Request access token for DQ API Entra ->> Entra: Can this user access DQ API? Entra ->> Admin: Access token for DQ API Admin ->> DQ API (SPN B): This is the secret for SPN A DQ API (SPN B) ->> Database: Store secret for SPN A ``` ## Client credential flow (using stored credentials) ```{mermaid} sequenceDiagram participant Secret Client (SPN A) participant Entra participant DQ API (SPN B) participant Database participant Databricks Secret Client (SPN A) ->> Entra: Request access token for DQ API
using client ID and secret Entra ->> Entra: Can this user access DQ API? Entra ->> Secret Client (SPN A): Access token for DQ API Secret Client (SPN A) ->> DQ API (SPN B): Access token for DQ API DQ API (SPN B) ->> Database: Request client secret for SPN A Database ->> DQ API (SPN B): Client secret SPN A DQ API (SPN B) ->> Entra: Request access token for Databricks,
providing token client ID and secret for SPN A Entra ->> DQ API (SPN B): Access token for Databricks for SPN A DQ API (SPN B) ->> Databricks: Request data using access token using credentials for SPN A Databricks ->> DQ API (SPN B): Data from Databricks API ```