17 février 2014

SharePoint 2013 : Traduire un claim

Dans SharePoint 2013, les applications web utilisent nativement une authentification basée sur les revendications.
Techniquement, le principe est le suivant : les utilisateurs obtiennent un jeton de sécurité signé numériquement par un fournisseur d’identité approuvé. Ce jeton contient un ensemble de revendications, chacune représentant un élément spécifique des données concernant un utilisateur, par exemple son nom, ses appartenances à des groupes et son rôle sur le réseau. Les applications qui prennent en charge l’authentification basée sur les revendications obtiennent un jeton de sécurité d’un utilisateur, au lieu d’informations d’identification, et utilisent les informations des revendications pour déterminer l’accès aux ressources.
L’authentification basée sur les revendications repose sur des normes telles que WS-Federation et WS-Trust, et sur des protocoles tels que SAML (Security Assertion Markup Language).
 
Ce nouveau processus comporte de nombreux avantages :
  • De nombreux fournisseurs d'authentification peuvent être utilisés simplement sur les web application,
  • Il n'est plus nécessaire d'étendre vos web application pour supporter différents providers (FBA, NTLM, ADFS,...).

Dans SharePoint 2013, lorsque vous créez une application web depuis l’administration centrale, vous pouvez uniquement spécifier les types et les méthodes d’authentification basée sur les revendications. Il reste en effet toujours possible de créer des applications web en mode dit "classique" via PowerShell mais ce mode n'est pas conseillé voir déprécié.
 
Bien que cette authentification par claims était déjà disponible sous SharePoint 2010, peu de sociétés avaient sauté le pas. Ce changement induit donc quelques modifications dans les développements SharePoint.
 
Pour éviter quelques surprises, voici une fonction permettant de traduire un identifiant claims en sa correspondance "Domaine\NomUtilisateur":
 
private string GetAccountNameFromClaim(string claimUserName)
{
 try
 {
  SPClaimProviderManager spClaimProviderManager = SPClaimProviderManager.Local;
  if (spClaimProviderManager != null)
  {
   if (SPClaimProviderManager.IsEncodedClaim(claimUserName))
   {
    // Retourne l'identifiant sous forme Domaine\NomUtilisateur
    return spClaimProviderManager.ConvertClaimToIdentifier(claimUserName);
   }
  }
  
  // Retourne le token windows de l'utilisateur si celui-ci n'a pas pu être traduit précédemment
  return claimUserName;
 }
 catch (Exception ex)
 {
  throw new Exception("Une erreur est survenue lors de la conversion du claim.",ex);
 }
}

Aucun commentaire:

Enregistrer un commentaire