Passer au contenu principal
Auth0 peut simplifier considérablement le processus d’authentification pour SharePoint. Dans ce tutoriel, vous apprendrez à ajouter l’ (SSO) à SharePoint avec Auth0. Vos utilisateurs pourront se connecter à l’aide de n’importe lequel de nos fournisseurs d’identité sociaux (Facebook, X, Github, etc.), fournisseurs d’identité d’entreprise (LDAP, Active Directory, ADFS, etc.) ou avec un nom d’utilisateur et un mot de passe.
Auth0 ne prend plus en charge Auth0Claims Provider pour SharePoint 2010 / 2013. Ce package est obsolète pour les locataires existants et n’est pas disponible pour les nouveaux locataires.

Configuration

Étape 1. Ajouter l’intégration à votre compte

La première chose à faire est d’accéder à la section Intégrations SSO du Dashboard et de choisir SharePoint dans la liste des applications.

Étape 2. Suivez la documentation interactive

Si votre serveur SharePoint n’a pas accès à Internet, téléchargez manuellement les fichiers d’installation. (En savoir plus sur l’installation hors ligne).
Dans l’onglet Settings, vous devrez entrer l’URL de l’application Web SharePoint et l’URL externe (généralement le point de terminaison Internet dans vos mappages d’accès de remplacement). La documentation interactive débute par l’installation des Cmdlets Auth0 pour SharePoint :
SharePoint Management Shell - installation des cmdlets
Une fois l’installation terminée, vous pourrez activer ou désactiver Auth0 et le fournisseur de revendications pour les différentes applications Web. Vous devrez activer l’authentification avec Auth0 :
SharePoint Management Shell - installation d’Auth0 - Activer l’authentification
Ensuite, installez le fournisseur de revendications pour vous assurer que le People Picker et les autorisations fonctionnent correctement :
SharePoint Management Shell - installer le fournisseur de revendications
Une fois ces scripts exécutés, vous terminerez la configuration dans l’administration centrale :
Administration centrale SharePoint - terminer la configuration
Notez que l’appel à Enable-Auth0 peut être adapté pour :
  • Modifier l’identifiant unique des utilisateurs (comme le courriel ou l’id d’un utilisateur)
  • Permettre de transmettre des revendications supplémentaires à SharePoint
  • Activer ou désactiver l’authentification Windows par défaut
L’exemple suivant ajoute également la revendication Role au mappage des revendications et autorise l’authentification Windows :
Enable-Auth0
  -auth0Domain:"fabrikam.auth0.com"
  -clientId:"bOFty3tWgpijnwMcltysNFqHgO1ziz1I"
  -webAppUrl:"http://fabrikam-sp/"
  -identifierClaimType:"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
  -claims:@(
    "Email|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
    "Role|http://schemas.microsoft.com/ws/2008/06/identity/claims/role", "Client ID|http://schemas.auth0.com/clientID",
    "Given Name|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
    "Surname|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "Picture|http://schemas.auth0.com/picture")
  -allowWindowsAuth

Étape 3. SharePoint est maintenant configuré

Vous avez configuré SharePoint pour utiliser Auth0 comme courtier SSO. Lorsque vos utilisateurs visiteront votre site, une page de connexion leur sera présentée, affichant toutes les connexions activées pour cette application. Selon les revendications qui ont été mappées lors de l’installation du fournisseur de revendications, ces renseignements supplémentaires seront aussi accessibles sur la page des paramètres personnels de l’utilisateur :
SharePoint - renseignements sur l’utilisateur
Administration centrale de SharePoint - configuration complète
Notez que vous pouvez adapter l’appel à Enable-Auth0 pour :
  • Modifier l’identifiant unique des utilisateurs (comme le courriel ou l’id d’un utilisateur)
  • Permettre la transmission de revendications supplémentaires à SharePoint
  • Activer ou désactiver l’authentification Windows par défaut
Cet exemple ajoute aussi la revendication Role au mappage des revendications et autorise l’authentification Windows :
Enable-Auth0
  -auth0Domain:"fabrikam.auth0.com"
  -clientId:"bOFty3tWgpijnwMcltysNFqHgO1ziz1I"
  -webAppUrl:"http://fabrikam-sp/"
  -identifierClaimType:"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
  -claims:@(
    "Email|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
    "Role|http://schemas.microsoft.com/ws/2008/06/identity/claims/role", "Client ID|http://schemas.auth0.com/clientID",
    "Given Name|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname",
    "Surname|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "Picture|http://schemas.auth0.com/picture")
  -allowWindowsAuth
SharePoint utilisera désormais Auth0 comme courtier d’authentification unique (SSO).

Personnalisation de la page de connexion

Vous pouvez personnaliser la page de connexion en suivant les instructions de Auth0 Universal Login. Vous souhaiterez peut-être offrir aux utilisateurs un moyen de s’authentifier avec SharePoint au moyen de l’authentification Windows, en contournant Auth0. Vous pouvez le faire en personnalisant la page de connexion et en ajoutant un lien vers le point de terminaison de l’authentification Windows (généralement semblable à https://yoursharepointserver/_windows/default.aspx?ReturnUrl=/_layouts/15/Authenticate.aspx). Une façon de procéder consiste à utiliser jQuery pour modifier le widget Lock et y ajouter un lien vers le point de terminaison de l’authentification Windows. Vous devez ajouter une référence à jQuery en haut de la section <body> de la page de connexion personnalisée.
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
Avant d’appeler lock.show(), ajoutez le code nécessaire pour modifier le DOM HTML et ajouter le lien.
// construire Lock
// var lock = ...
[...]
// Un ou plusieurs ID client SharePoint ici pour lesquels vous souhaitez
// un bouton d'authentification Windows
var sharepointClientIDs = ['your_sharepoint_client_id'];

if (sharepointClientIDs.indexOf(config.clientID) >= 0) {
  lock.on('signin ready', function() { 
    var getParameterByName = function(name) {
      name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
      var regexS = "[\\?&]" + name + "=([^&#]*)";
      var regex = new RegExp(regexS);
      var results = regex.exec(window.location.search);
      if (results == null) return null;
      else return results[1];
    };
    // obtenir l'hôte à partir de l'URL de rappel
    var parser = document.createElement('a');
    parser.href = config.callbackURL;
    var host = parser.host;
    var windowsAuthURL = "https://" + host + "/_windows/default.aspx?ReturnUrl=/_layouts/15/Authenticate.aspx";
    var wctx = getParameterByName("wctx");
    if (wctx) {
      windowsAuthURL += "&Source=" + wctx;
    }

    $('.auth0-lock-tabs-container') 
    .after('<div><p class="auth0-lock-alternative" style="padding:5px 0;">' + 
      '<a class="auth0-lock-alternative-link" ' + 
      'href="'+ windowsAuthURL + '">' +
      'Login with Windows Authentication!!!</a>' + 
      '</p><p><span>or</span></p></div>').attr('href','https://nowhere');
  });
}

lock.show();

Résolution des problèmes

Lorsque vous travaillez avec des revendications supplémentaires et l’autorisation, il peut être utile d’afficher les revendications de l’utilisateur actuel. L’article du spécialiste Microsoft Liam Clearly, Claims Viewer Web Part, peut servir à résoudre tout problème lié aux revendications de l’utilisateur :

Journaux dans SP2010

Les erreurs et les avertissements sont consignés dans le service Unified Logging Service de SharePoint, et des outils comme ULS Viewer peuvent servir à résoudre les problèmes que vous pourriez rencontrer lors de l’utilisation du fournisseur de revendications. Pour en savoir plus sur ULS Viewer et obtenir ses spécifications, consultez la documentation Microsoft ULS Viewer.

Journaux de SP2013

Pour SharePoint 2013, nous n’utilisons plus Unified Logging Service pour nos journaux; nous utilisons désormais Event Tracing for Windows à la place. Cela offre de meilleures performances et vous permet de capturer tous les événements consignés de plusieurs façons. Pour afficher les journaux en temps réel, vous pouvez télécharger l’Auth0 Logs Processor depuis GitHub. Exécutez cet outil sur votre ou vos serveurs SharePoint pour voir tous les appels que SharePoint effectue au fournisseur de revendications :

Prochaines étapes

Autorisation

Les revendications transmises par Auth0 peuvent aussi servir à l’autorisation dans SharePoint. Par exemple, un utilisateur dont la revendication Role contient Fabrikam HR devrait avoir accès à un site précis ou y avoir le rôle de contributeur. Prenons Azure AD comme exemple. Dans cet annuaire infonuagique, les utilisateurs peuvent faire partie de groupes, et David fait partie de Fabrikam HR. Lorsque David se connecte avec son compte Azure AD (et que l’attribut Security Groups est activé pour cette connexion), ses appartenances à des groupes sont stockées dans l’attribut groups du profil de l’utilisateur. Si nous voulons rendre ces groupes disponibles comme rôles dans SharePoint, nous devrons écrire une Rule qui ajoute cela à la configuration . Cette Rule ne s’exécutera que pour l’application nommée Fabrikam Intranet (SharePoint).
function (user, context, callback) {
  if (context.clientName === 'Fabrikam Intranet (SharePoint)') {
    context.samlConfiguration.mappings = {
        'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier': 'user_id',
        'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress': 'email',
        'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name': 'name',
        'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname': 'given_name',
        'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname': 'family_name',
        'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn': 'upn',
        'http://schemas.microsoft.com/ws/2008/06/identity/claims/role': 'groups'
    };
  }

  callback(null, user, context);
}
Cela ajoutera une revendication sortante supplémentaire http://schemas.microsoft.com/ws/2008/06/identity/claims/role contenant groups, qui sera utilisée par SharePoint pour l’autorisation. Lors de l’installation du fournisseur de revendications, nous devons autoriser la transmission de la revendication Role à SharePoint en l’ajoutant à la liste de mappage des revendications :
Enable-Auth0
  -auth0Domain:"fabrikam.auth0.com"
  ...
  -claims:@(
    "Email|http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress",
    "Role|http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
    ...)
  ...
  -Verbose
Par défaut, un utilisateur n’a pas accès au site. Maintenant, au lieu d’ajouter cet utilisateur en particulier à un groupe SharePoint (p. ex. : Contributeurs), nous pouvons plutôt ajouter un rôle à un groupe SharePoint. Voici un exemple de script PowerShell montrant comment ajouter les membres de “Fabrikam HR” au groupe Contributeurs :
$webName = "http://fabrikam-sp"
$groupName = "Contributors"
$roleClaim = "Fabrikam HR"

$sts = Get-SPTrustedIdentityTokenIssuer "Auth0"
$claimPrincipal = New-SPClaimsPrincipal -ClaimValue $roleClaim -ClaimType "http://schemas.microsoft.com/ws/2008/06/identity/claims/role" -TrustedIdentityTokenIssuer $sts

$web = Get-SPWeb $webName
$user = New-SPUser -UserAlias $claimPrincipal.ToEncodedString() -Web $web

$group = $web.SiteGroups[$groupName]
$group.AddUser($user)
Une fois cette valeur de revendication ajoutée au groupe Contributors, David pourra accéder au site et en modifier le contenu.

Synchronisation du profil utilisateur

Par défaut, SharePoint peut synchroniser les renseignements de profil utilisateur provenant d’Active Directory. Avec Auth0, toutefois, les utilisateurs peuvent provenir de différents types de connexions (des connexions sociales aux connexions d’entreprise), ce qui nécessite une approche différente pour synchroniser les profils utilisateur. Une première approche consisterait à créer une tâche planifiée qui s’exécute toutes les quelques heures, interroge le point de terminaison Users d’Auth0 et synchronise les renseignements de profil de ces utilisateurs.
using System;

using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

using Microsoft.Office.Server;
using Microsoft.Office.Server.UserProfiles;

namespace UserProfileSync
{
    class Program
    {
        static void Main(string[] args)
        {
            // Appeler le Management API Auth0 - https://docs.auth0.com/api/v2

            using (var site = new SPSite("http://servername"))
            {
                var context = SPServiceContext.GetContext(site);
                var profileManager = new UserProfileManager(context);

                var accountName = "i:05.t|auth0|john@example.org";
                var userProfile = profileManager.GetUserProfile(accountName);
                userProfile[PropertyConstants.HomePhone].Value = "+1 594 9392";
                userProfile.Commit();
            }
        }
    }
}
Autrement, cette logique pourrait aussi être implémentée sous la forme d’un HttpModule qui s’exécute chaque fois que l’utilisateur se connecte :
public class PersistUserClaimsHttpModule : IHttpModule
{
    private SPFederationAuthenticationModule FederationModule
    {
        get { return HttpContext.Current.ApplicationInstance.Modules["FederatedAuthentication"] as SPFederationAuthenticationModule; }   
    }

    public void Init(HttpApplication context)
    {
        FederationModule.SecurityTokenValidated += OnFederationSecurityTokenValidated;
    }

    private void OnFederationSecurityTokenValidated(object sender, SecurityTokenValidatedEventArgs e)
    {
        // Utiliser e.ClaimsPrincipal
    }
}