Le but de ce client entra (ecli) est multiple :
- Explorer les API Entra
- Fournir des modules go permettant de manipuler les objets IAM (utilisateurs, applications, groupes...) Avec pour objectif de pouvoir faire du provisionning complexe d'application, ou des opérations de synchronisations.
- Fournir un outil ligne de commande éventuellement utilisable pour les opérations simples
Le client s'appuie sur cobra (github.com/spf13/cobra) et donc main.go ne fait qu'appeler les commandes définies dans /cmd
Les commandes utilisaient les packages httpClient et sdkClient qui sont des implémentations de client.Service. Ces 2 packages httpClient et sdkClient sont les deux "moteurs" que l'application peut utiliser pour accéder aux API Entra.
- httpClient est un moteur bas niveau qui s'appuie sur net/http pour faire des requêtes REST.
- sdkClient s'appuyait sur le sdk microsoft qui est de plus haut niveau
Ces deux moteurs utilisent les models qui sont dans internal/models Et httpClient utilise une fine surcouche de net/http qui est définie dans pkg/rest
L'utilisation du noteur sdkClient est deprecated et du coup le flag de selection --engine est lui aussi supprimé
make build
Si les make tools ne sont pas installés:
go build -o ecli
make test
Si les make tools ne sont pas installés:
go test ./...
mv env.sample .env
Ensuite modifier .env en renseignant les bonnes valeurs:
- ENTRA_ACCESS_TOKEN peut rester vide (le client va le négocier)
- ENTRA_CLIENTID conserver la valeur qui est correcte pour md-entra-client
- ENTRA_TENANT conserver la valeur qui est correcte pour md-entra-client
- La valeur d'ENTRA_SECRET doit être créee dans App regitration -> md-entra-client -> Certificats & secrets
L'aide intégrée :
./ecli --help
constitue un bon point d'entrée, mais les commandes son assez simples.
Quelques utilisations possibles :
Afficher l'id et le displayName des 50 premiers groupes
./ecli group list --select id,displayname --top 50
Afficher tous les utilisateurs (en contournant la pagination server side d'Entra). Qui sont nombreux...
./ecli user list
Afficher les informations d'une application spécifique sélectionnée par son ID
./ecli application get --id 4338fbfb-83b6-44be-ab56-7bb5e1f91b86
Afficher les informations des applicatoins matchant certains critères
./ecli application list --search displayname:Portal
Créer une application OIDC
./ecli application oidc create --displayname "Mon appli" --redirect_uri "https://mon.domaine.com/auth"
Supprimer une application par son id
./ecli application delete --id 5128baa5-03b7-49f8-9f06-d1f1464eff1e
- Entra API
- Authentication
- Tutoriel Go d'appel de l'API Graph
- http-client tutorial
- Graph API explorer
- Configuring SAML application through API
Golang Modules
- Microsoft graph API module
- Azure SDK for go
- github.com/Azure/azure-sdk-for-go/sdk/azidentity
- github.com/Azure/azure-sdk-for-go/sdk/azcore/policy
- Microsoft documentation for Golang AzureAD MSAL module
Liste des autorisations