MSGraph – ALL

requête API à partir d’une CMD

Using Find-MgGraphCommand cmdlet | Microsoft Learn

App registration vs Entreprise app

Différence App Registrations et Entreprise applications

L’enregistrement d’application permet d’enregistrer une application à intégrer avec Microsoft Entra ID (application que vous développez), tandis que les applications d’entreprise permettent l’enregistrement d’applications ainsi que l’ajout et la configuration d’applications SaaS à partir de la galerie d’applications Microsoft Entra. Les applications d’entreprise permettent également de publier les applications déployées sur site.

Les inscriptions d’applications sont l’endroit où vous enregistrez vos applications, tandis que les applications d’entreprise sont l’endroit où vous gérez l’accès à ces applications.

AppRegistration : app basées sur OIDC (OpenID Connect)
Enterprise App : app pouvant utilisées n’importe quelle norme.

En utilisant OpenID Connect ou SAML de façon indépendante, les entreprises peuvent assurer l’authentification des utilisateurs (user authentication) et déployer l’authentification unique (SSO). Bien que les deux permettent d’encadrer la connexion, ils présentent différents avantages et inconvénients.

OpenID Connect s’appuie sur le protocole OAuth 2.0, associé à un jeton JSON Web Token (JWT) supplémentaire, appelé « jeton d’identification » (ID token), pour normaliser les aspects pouvant être personnalisés avec OAuth 2.0, comme les étendues et la découverte des terminaux. Cette norme a été conçue spécifiquement pour l’authentification des utilisateurs. Elle est couramment utilisée pour permettre aux utilisateurs de se connecter à des applications mobiles ou à des sites web commerciaux.
SAML 2.0 est totalement indépendant d’OAuth et repose sur un échange de messages pour assurer une authentification au format SAML XML, plutôt que sur un jeton JWT. Cette norme est plus généralement utilisée pour permettre aux utilisateurs d’entreprise d’accéder à plusieurs applications en se connectant une seule fois.

Source :
https://www.okta.com/fr/identity-101/whats-the-difference-between-oauth-openid-connect-and-saml/
https://learn.microsoft.com/en-us/answers/questions/270680/app-registration-vs-enterprise-applications

Connexion via une APi

$clientId = ""
$tenantName = "xxx.onmicrosoft.com"
$clientSecret = ""
$resource = "https://graph.microsoft.com/"

$ReqTokenBody = @{
    Grant_Type    = "client_credentials"
    Scope         = "https://graph.microsoft.com/.default"
    client_Id     = $clientID
    Client_Secret = $clientSecret
} 
$TokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantName/oauth2/v2.0/token" -Method POST -Body $ReqTokenBody
#Usage :
Invoke-RestMethod -Headers @{Authorization = "Bearer $($Tokenresponse.access_token)"} -Uri $ApiUrl -Method Get

Identifier l’erreur sur une req api

try {
    Requête Graph
} catch {
    $responseStream = $_.Exception.Response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($responseStream)
    $errorBody = $reader.ReadToEnd()
    Write-Host "Détails de l'erreur : $errorBody"
}

Vérification des droits sur un token

jwt.ms: Welcome!

Récupération des noms des rôles

(Get-MgServicePrincipal -ServicePrincipalId "6246bded-57cf-4634-b99c-ccd662a42b71").AppRoles | fl

Récupération des rôles d’une app

(Get-MgServicePrincipalAppRoleAssignment -ServicePrincipalId 072024cd-d30c-42af-9da4-44ea8f212dda).appRoleAssignments
#Ou sinon en Graph via
https://graph.microsoft.com/beta/servicePrincipals/072024cd-d30c-42af-9da4-44ea8f212dda/appRoleAssignments

Avec la commande Get-MgServicePrincipalAppRoleAssignment :
– « 6246bded-57cf-4634-b99c-ccd662a42b71 » correspond à ResourceId
– « 332a536c-c7ef-4017-ab91-336970924f0d » corresspond à AppRoleId
On récupère donc le nom du rôle via la commande :
((Get-MgServicePrincipal -ServicePrincipalId « 6246bded-57cf-4634-b99c-ccd662a42b71 »).AppRoles | where {$_.Id -eq « 332a536c-c7ef-4017-ab91-336970924f0d »}).Value

Permissions sur une identité managée

#Affectation de permissions à une identité managé :
Connect-AzureAD
$TenantID="xxx"
# Microsoft Graph App ID (DON'T CHANGE)
$GraphAppId = "00000003-0000-0000-c000-000000000000" #Id pour Graph
#$GraphAppId = "dc50a0fb-09a3-484d-be87-e023b12c6440" #Id pour Exchange.Managed
# Name of the manage identity (same as the Logic App name)
$DisplayNameOfMSI="aa-shd-prd-frc-automation-snow-ticketprocessing" 
# Check the Microsoft Graph documentation for the permission you need for the operation
$PermissionName = "Mail.Send" 
#$PermissionName = "Exchange.ManageAsApp" 

$MSI = (Get-AzureADServicePrincipal -Filter "displayName eq '$DisplayNameOfMSI'")
Start-Sleep -Seconds 10
$GraphServicePrincipal = Get-AzureADServicePrincipal -Filter "appId eq '$GraphAppId'"
$AppRole = $GraphServicePrincipal.AppRoles | `
Where-Object {$_.Value -eq $PermissionName -and $_.AllowedMemberTypes -contains "Application"}
New-AzureAdServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId `
-ResourceId $GraphServicePrincipal.ObjectId -Id $AppRole.Id