Loupe

[Office 365] Utilisation de l’API Office 365 pour gérer les licences utilisateurs

Lorsqu’on gère les comptes utilisateurs directement dans Office 365, mais aussi lorsqu’on les synchronise, on peut être amené à gérer l’affectation des licences soit automatiquement, soit selon des règles particulières.

Il existe ainsi des commandes PowerShell pour cela :

Avec la mise à disposition de l’API Office 365 et plus particulièrement l’Azure AD Graph API (mise à jour en v2.0 récemment) pour la gestion des comptes, il est possible de réaliser une application de création des comptes similaires à celle proposée en standard, mais avec des éléments personnalisés propre à votre entreprise, par exemple :

  • la sélection d’un mot de passe par défaut fixe pour tous les nouveaux comptes créés avec obligation d’en changer
  • l’assignation de licences selon la fonction ou le service de la personne (ex: Dynamics CRM Online pour les membres du service commercial)
  • un accès mobile simplifié aux fonctions clés

Pour information, afin de gagner du temps pour le démarrage de votre projet, je vous conseille de partir des starter kits présents sur GitHub à l’adresse suivante : https://github.com/OfficeDev, notamment les projets MVC comme celui-ci : https://github.com/OfficeDev/O365-ASPNETMVC-Start

En premier lieu, il nous faut récupérer la liste des licences disponibles, et ne permettre la sélection que de celles qui sont valides (i.e. quantité restante > 0 et état actif,). Pour cela, il faut utiliser la propriété “SubscribedSkus” du client Active Directory. Vous pourrez vous inspirer du contrôleur “ContactsController” présent dans le Starter Kit comme base.

var signInUserId = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
var userObjectId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
var tenantId = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;

AuthenticationContext authContext = SecurityHelper.GetAuthContext();
ViewBag.Skus = null;
try
{
    DiscoveryClient discClient = new DiscoveryClient(SettingsHelper.DiscoveryServiceEndpointUri,
            async () =>
            {
                var token = await SecurityHelper.GetToken(authContext, SettingsHelper.DiscoveryServiceResourceId);
                return token;
            });

    var dcr = await discClient.DiscoverCapabilityAsync("Directory");

    ViewBag.ResourceId = dcr.ServiceResourceId;

    ActiveDirectoryClient client = new Microsoft.Azure.ActiveDirectory.GraphClient.ActiveDirectoryClient(
        dcr.ServiceEndpointUri,
        async () =>
        {
            var authResult = await authContext.AcquireTokenSilentAsync(dcr.ServiceResourceId, new ClientCredential(SettingsHelper.ClientId, SettingsHelper.AppKey), new UserIdentifier(userObjectId, UserIdentifierType.UniqueId));

            return authResult.AccessToken;
        });

    var skus = await client.SubscribedSkus.ExecuteAsync();

    ViewBag.Skus = skus.CurrentPage.ToList();
}
catch (Exception ex)
{
}

Ici, je récupère les infos du service Azure AD via la capacité (Capability) “Directory” de manière dynamique, utile en cas d’application multi-tenant. Pour du simple tenant, l’URI de l’endpoint est de la forme https://graph.windows.net/[Nom du domaine]/). Ensuite j’interroge le service pour récupération les infos de licences.

Remarque: évidemment, il nous faudra suffisamment de droits sur la partie Azure Active Directory, à savoir “Read and Write directory data”

Je crée ensuite rapidement une vue qui liste les licences (j’ai ajouté le détail des licences) :

O365_SKUView

 

Avec un petit bout de JavaScript pour désactiver les cases à cocher

O365_SKUViewScript

 

Voici le rendu :

O365_SKUViewRender

 

Pour finir, si on complète le formulaire pour permettre de saisir les informations sur la personne qui seront utilises pour la création du compte avec les licences associées.

O365_SKUViewComplete

 

Côté code, on récupère les informations saisies dans le formulaire et il suffit de faire appel aux méthodes AddUserAsync et AssignLicenceAsync pour respectivement créer le compte et lui assigner les licences.

O365_SKUCreateUser

 

Et voici le résultat dans l’administration des comptes :

O365_SKUUserCreated

Maintenant, à vous de jouer !

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus