#SPC2012 : Understanding authentication for apps for SharePoint

Rob Howard, Program Manager, SharePoint Developer experience

Résumé :

La session est plutôt avancée sur les coulisses de l’authentification sur SharePoint 2013 via oAuth et claims. On parle beaucoup de gestion de tokens générés sur les pages et notamment sur la gestion des authentifications dans les apps pour SharePoint.

Session plutôt intéressante dans l’ensemble même si elle est très technique sur la façon dont SharePoint gère l’authentification.

Agenda :

  • Meet the app principal
  • Methods of app authentication
  • Apps and authorization
  • Advanced app authentication scenarios

La session commence avec une salle comble, le sujet intéresse. Il y a des personnes debout.

Howard nous prévient qu’il ne reviendra pas sur les principe d’hébergement d’App pour se concentrer vraiment sur l’authentification.

// App principal

Il montre un schéma sur son utilisation de Skydrive (username/password).

Il présente Contoso photo qui est un service permettant d’uploader des photos pour les imprimer et où on peut s’authentifier pour accéder à son Sa problématique est de passer ses photos de Contoso photo à Skydrive directement.

Mais il faut que Skydrive puisse savoir si une authentification est une autant de Contoso photo de soi-même.

Il y a une autre méthode pour gérer cela en disant que côté Skydrive on va autoriser Contoso photo à faire un view, upload, tag.

Il conclut cette partie en expliquant que c’est là qu’on va différencier les différents App Principal.

// App model

Il revient sur l’évolution de l’App/sandbox entre SP 2007 et SP 2013.

Sur 2013, que ce soit une app sur Azure, IIS, LAMP ou SP, les app gèrent l’authentification est gérée en OAuth. L’importance de l’authent est d’autant plus présente que les services peuvent être séparés.

// DEMO : SharePoint Connect

Il présente le newsfeed de SP2013, le follow etc.

Il va développer une App simple qui va poster un message dans le newsfeed en postant un lien, avec le serveur permettant de faire un screenshot de la page à utiliser comme aperçu (ThumbnailHelper).

Son app est faite en ASP.NET tournant sur IIS express. Il a mis sa page en favoris, et qu’importe le site sur lequel il est, il peut ouvrir son favoris, saisir un commentaire et la page poste un message avec un lien et le screenshot du site sur le newsfeed.

On voit sur son post a utilisé une app s’appelant SharePoint Connect (celle créée en ASP.NET)

// Retour sur les slides : Access Control

Deux aspects :

Authentication : vérifier si c’est bien la personne qui se connecte avec un principal Authorization : vérifier si cette personne a bien les droits.

Il revient sur un SP Hosted App où l’AppWeb est automatiquement authentifiée malgré le fait qu’elle soit dans un domaine différent. Il va expliquer comment c’est fait.

// Authentification :

* Nous commençons

* –> L’utilisateur a fourni un credential ?

* Oui : Est-ce un app web ?

* Non –> utilisation du context normal

* Oui –> on utilize user identity + l’app identity

* Non : Est-ce qu’on a fourni une App Token ? (jeton d’authentification)

* Non –> On considère que c’est enquête anonyme

* Oui  — >App token inclut les infos user ?

* Oui –> on est sur le même cas que app web –> User + app context

* Non –> on a uniquement le contexte de l’app

// DEMO : SP Hosted App – Basic app authentication

Il a une app avec juste une custom list.

Il insiste sur le fait que cette app a bien une URL spécifique qui est sur un domaine bien précis.

Il ajoute un item, retourne sur l’élément tout juste créé. Il voit que l’item est créé par le nom de l’app on behalf de Rob Howard. C’est l’app qui créé l’item avec l’action de Rob Howard.

Il retourne sur VS2012 : créé une app Provider-hosted, cela créé un csproj pour déclarer l’App, un autre csproj pour le projet ASP.NET classique.

Il ajoute à son csproj App, une liste custom list.

Il change de csproj et va sur sa page d’accueil de son projet ASP.NET.

Il efface le code mis par défaut. Il insère un snippet permettant de récupérer le Token grâce à la classe TokenHelper mise par défaut dans le projet. Le token est casté en SharePointContextToken.

Il déclaire la récupération d’un token en passant le contexte grâce à TokenHelper.GetAccessToken(). Ce token récupère le contexte de l’app et de l’utilisateur et le passe pour la création d’item.

Il insère un snippet qui permet d’ajouter un item dans la liste.

Il ajoute en dessous un autre exemple pour récupérer le token de l’app uniquement via TokenHelper.GetAppOnlyAccessToken() et le repasse à la même méthode d’ajout d’item.

Debug –> on voit que le premier cas, on a un item par l’App on behalf de l’utilisateur. Et l’autre que par l’App.

–> Conclusion : on voit qu’on peut avoir des credentials différents selon le token.

// Retour slides : SharePoint Context Token

Il nous montre ce qui se passe lorsqu’un  entre le serveur SharePoint, le domain App, le navigateur et le domain app.com

1) L’utilisateur se connecte à la page SP

2) SharePoint demande à ACS (élément de la ferme qui donc

3) ACS renvoie le signed context token

4) SharePoint affiche le token et le renvoie sur la page de l’App

6) L’App va valider la signature

7) ACS renvoie un acess token

8) l’App.com renvoie l’access token à SP qui doit définir une requête de service

9) retour à App.com

10) App.com affiche le contenu désiré

Le token une fois décodé est du JSON qui représente les informations permettant d’identifier l’utilisateur.

// Authorization

Maintenant que nous savons que la personne est authentifiée, il faut vérifier si elle a les droits.

Une app est considéré comme ayant une identité différente de l’utilisateur qui l’exécute (l’app imprime est différent du fait que l’utilisateur utilise l’app pour imprimer) Les accès sont néanmoins gérés par autorisations avec une gestion des étendue de droits (droits que sur une doc lib) AccessCheck émet la décision d’autorisation en utilisation l’identité (user ou app), les attributs de la ressource (ACL), et les policies (user only, app & user, app only).

Pour les requêtes de permissions, on peut définir dans une App via le AppManifest, les AppPermissionsRequests définissant le Scope (liste par ex), le droit « Right » est quelle capacité est en question comme la « Lecture » par exemple.

Cela va permettre à l’installation d’autoriser un administrateur d’accepter les permissions Il y a un format bien spécial à définir dans le Scope (« http://sharepoint/content/sitecollection » n’étant pas une vrai adresse mais une façon de dire qu’on accès au contenu et à la collection sur laquelle on installe).

// DEMO : Cached refresh token

Il revient sur VS2012 et son App.

Il va utiliser un cache ASP.NET classique en mettant en cache le SharePoint context token. Il ajoute un snippet permettant de définir une fonction callback exécutée lorsque le cache expire.

Sur l’ajout, il définit une fonction récupérant le AccessToken basé sur le context token.

Sur l’expiration, il ajoute les items dans sa liste.

Il veut juste montrer qu’on peut cacher les AccessToken et prévenir que le token a expiré dans le cache car c’est une opération qui peut rester longtemps en cache.

// Retour sur les slides : App Identity entre Online et On-Premises

Dans le cloud, nous avons un Azure AD et une authentification dans les apps via oAuth à 3 serveurs.

On Premises : On a une authentification basée sur certificat.

On a une solution hybride, permettant à une ferme on-premises, permettant de se connecter à un Azure AD, nécessitant une configuration avancée.

// Workflow service sur SharePoint 2013

Il ne rentre pas dans les détails mais il faut comprendre que étant donné que les Workflow Service sont sur un service à part, serveur à part. Il y a une authentification grâce à un Access Control permettant d’identifier grâce à oAuth entre la ferme SP et le service de Workflow.

Christian

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s