Loupe

Manipuler l’API REST Sharepoint 2013 depuis une application tierce

J’ai récemment eu besoin de jouer avec les nouvelles APIs de Sharepoint 2013 et je dois dire que cela a bien changé (en mieux).

En effet, on dispose maintenant d’une API REST complète qui permet de requêter le serveur Sharepoint afin d’interroger le contenu d’une liste, récupérer les informations du profil utilisateur, etc.

Mais la première étape, avant de pouvoir faire tout cela, est d’arriver à s’authentifier aurpès du serveur Sharepoint. Et c’est là que ADAL (Azure AD Authentication Library) va nous venir en aide Smile

En effet, c’est grâce à cette librairie que nous allons pouvoir nous connecter à notre serveur Sharepoint, lui-même permettant aux utilisateurs de se connecter avec leur compte d’entreprise.

La première étape pour arriver à se connecter avec ADAL est de déclarer, dans son annuaire Azure Active Directory, une nouvelle application (de type “client natif”):

image

Ensuite, dans la configuration de l’application, il convient de rajouter des autorisations pour d’autres applications et, dans notre cas, pour Office 365 Sharepoint Online:

image

A présent, il suffit d’utiliser le package Nuget “Active Directory Authentication Library” dans votre application pour réaliser la connexion:

image

L’implémentation, en termes de code, est très similaire sur les différentes plateformes mais peut dépendre de certains paramètres. A titre d’exemple, voici ce que cela donne sur Android (avec Xamarin Smile):

public async Task<AuthenticationResult> Authenticate(string authority, string resource, string clientId, string returnUri)
{
    var authContext = new AuthenticationContext(authority);
    if (authContext.TokenCache.ReadItems().Any())
    {
        authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
    }

    var uri = new Uri(returnUri);
    var platformParams = new PlatformParameters((Activity)Forms.Context);
    var authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams);

    return authResult;
}

Où les paramètres authority, resource, clientId et returnUri sont initialisées en fonction de vos propres paramètres:

image

Dès lors, lorsque vous appelerez cette méthode, vous serez redirigé vers la mire de connexion d’Office 365, et c’est ADAL qui se chargera du reste pour vous !

Une fois authentifié, vous récupéré un jeton d’accès OAuth que vous pouvez passer en paramètre aux différentes requêtes REST que vous faîtes à l’API de Sharepoint.

Ainsi, si vous souhaitez récupérer les informations de l’utilisateur, vous pouvez utiliser ce code:

public async Task GetCurrentUserInfoAsync(accessToken)
{
    if (!_isInitialized)
        throw new InvalidOperationException();

    using (var httpClient = new HttpClient())
    {
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        try
        {
            var result = await httpClient.GetStringAsync(string.Format("{0}/_api/SP.UserProfiles.PeopleManager/GetMyProperties", Constants.RESOURCE_URI));
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
}

Et le tour est joué. Dès lors que vous utilisez ce jeton d’accès, vous êtes en mesure d’appeler les méthodes de l’API REST de Sharepoint 2013!

En ce qui concerne l’expiration du token, là encore, la librairie vous permet de gagner du temps car vous n’avez plus besoin de gérer les RefreshToken: ADAL gère ce jeton en interne, pour vous, et l’utilise quand cela s’avère nécessaire, de manière totalement transparente !

 

Happy coding! Smile

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus