This module was created in order to eliminate the need to build authentication into each and every other module that talks to Entra ID. Instead of having 10 different modules, each with different options for client secrets, client certificates, managed service identities etc. this is built into this module and consumed by other modules. This module also takes care of caching, expiration, etc.
The overall approach to using the module is:
- Load the module (duh...)
- Add profiles using one or more of the following profiles (examples 1.*):
- Add-EntraIDAutomationAccountMSIAccessTokenProfile
- Add-EntraIDAzureArcManagedMSITokenProfile
- Add-EntraIDAzureDevOpsFederatedCredentialAccessTokenProfile
- Add-EntraIDAzurePowerShellSessionTokenProfile
- Add-EntraIDClientCertificateAccessTokenProfile
- Add-EntraIDClientSecretAccessTokenProfile
- Add-EntraIDExternalAccessTokenProfile
- Add-EntraIDFunctionAppMSIAccessTokenProfile
- Add-EntraIDGitHubFederatedCredentialAccessTokenProfile
- Add-EntraIDInteractiveUserAccessTokenProfile
- Add-EntraIDROPCAccessTokenProfile
- Utilize
Get-EntraIDAccessToken -Profile "Name"in your scripts and modules to get the token (examples 2.*)
Example 1.1 - Adding a default profile using client secret authentication and the Microsoft Graph resource
$ClientSecret = Read-Host -AsSecureString
Add-EntraIDClientSecretAccessTokenProfile -ClientSecret $ClientSecret -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "179ba868-8e81-4bcb-b8e4-a3268fe8b13d"$ClientSecret = Read-Host -AsSecureString
Add-EntraIDClientSecretAccessTokenProfile -Profile "Pegasus" -ClientSecret $ClientSecret -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "179ba868-8e81-4bcb-b8e4-a3268fe8b13d" -Resource "https://vault.azure.net/"Example 1.3 - Adding a profile using an Automation Account System Assigned Identity and the Microsoft Graph resource
Add-EntraIDAutomationAccountMSIAccessTokenProfileExample 1.4 - Adding a profile using an Automation Account User Assigned Identity and Key Vault as resource
Add-EntraIDAutomationAccountMSIAccessTokenProfile -ClientId "<uai clientid>" -Resource "https://vault.azure.net/"Add-EntraIDExternalAccessTokenProfile -AccessToken "ey..."Add-EntraIDClientCertificateAccessTokenProfile -Name $Name -ClientId "..." -TenantId "..." -Thumbprint "D08A6C49E577AEB7DE4468CD49143288D6F4B003"Add-EntraIDAzureArcManagedMSITokenProfileAdd-EntraIDAzureDevOpsFederatedCredentialAccessTokenProfile -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "179ba868-8e81-4bcb-b8e4-a3268fe8b13d"Add-EntraIDAzurePowerShellSessionTokenProfileAdd-EntraIDFunctionAppMSIAccessTokenProfileAdd-EntraIDGitHubFederatedCredentialAccessTokenProfile -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "179ba868-8e81-4bcb-b8e4-a3268fe8b13d"Add-EntraIDInteractiveUserAccessTokenProfile$UserCredential = Get-Credential
$ClientSecret = Read-Host -AsSecureString
Add-EntraIDROPCAccessTokenProfile -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "179ba868-8e81-4bcb-b8e4-a3268fe8b13d" -ClientSecret $ClientSecret -UserCredential $UserCredential# Step 1 - Add blueprint authentication
Add-EntraIDClientSecretAccessTokenProfile -ClientSecret $ClientSecret -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "9471f355-173a-4466-b142-3d4acf848b03" -Scope "api://AzureADTokenExchange/.default" -Name "Blueprint"
# Step 2 - Add autonomous agent authentication
Add-EntraIDFederatedCredentialTokenProfile -Name "Agent 1" -TenantId "237098ae-0798-4cf9-a3a5-208374d2dcfd" -ClientId "cd77c677-16ea-4f9d-b5b1-0aab1841694c" -FederatedAccessTokenProfile Blueprint -AgentIdentity -Scope "https://graph.microsoft.com/.default"Get-EntraIDAccessTokenGet-EntraIDAccessToken -ForceRefresh -Profile "Pegasus"Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users" -Headers (Get-EntraIDAccessTokenHeader)