Notifications Webhook UserLock - Guide étape par étape
Les Webhook permettent aux applications Web de s'abonner, en temps réel, aux événements d'accès clés qui se produisent dans UserLock.
Les événements de session tels que l'ouverture de session, la fermeture de session, le verrouillage, le déverrouillage, l'ouverture de session refusée, etc. sont envoyés sous forme de message JSON à une application Web. Des flux de travail personnalisés peuvent ensuite être générés en réponse à des événements d'accès spécifiques.
Combiné à l'API UserLock (documentation en anglais), il permet également la création dynamique de restrictions permanentes ou temporaires pour des profils utilisateur spécifiques, en réponse à un événement spécifique.
Cet article fournit un guide étape par étape sur le déploiement d'une application Web capable de recevoir des notifications Userlock dans Microsoft Azure.
Prérequis
Pour compléter ce tutoriel:
-
Installez Visual Studio 2017 avec les charges de travail suivantes:
- ASP.NET et développement web
- Développement azure
Si vous n'avez pas d'abonnement Azure, créez un compte gratuit avant de commencer.
-
1. Créer une application Web UserLockWebHook MVC
Pour suivre étape par étape plus en détail ce sujet, veuillez lire la documentation de Microsoft Azure ici (page en anglais).
Dans Visual Studio, créez un projet en sélectionnantFile > New > Project.
Dans la boîte de dialogue Nouveau projet sélectionnez Visual C# > Web > ASP.NET Web Application (.NET Framework).
-
Sélectionner le modèle MVC
Sélectionnez le modèle MVC et assurez-vous que l'authentification est définie sur Aucune authentification.
-
Mettez à jour tous les packages NuGet et installez le package NewtonSoft.Json
Ouvrez tools->NuGet Packet Manager->Manage NuGet packages for the solution.
Ouvrez l’onglet "Updates", cochez la case ‘Select all packages’ et cliquez sur le bouton Update.
Ouvrez l'onglet "Browse", entrez Newtonsoft.Json dans le champ de recherche et installez le package. Ce paquage sera utilisé pour désérialiser les notifications envoyées par UserLock.
-
Créez les classes suivantes dans le dossier Modèles
Ces classes seront également utilisées lors du processus de désérialisation.
public class UserLockServer
{
public string Id { get; set; }
public string FQDN { get; set; }
public string DisplayName { get; set; }
}
public class UserlockNotification
{
public UserLockServer Userlock { get; set; }
public int EventType { get; set; }
public DateTime EventTime { get; set; }
public string UserAccount { get; set; }
public string UserDomain { get; set; }
public string UserFullName { get; set; }
public string ComputerName { get; set; }
public int ComputerSession { get; set; }
public string ClientName { get; set; }
public string ClientAddress { get; set; }
public string SessionId { get; set; }
public int SubSessionId { get; set; }
public int LogonInfo { get; set; }
public int SessionType { get; set; }
public string ServerAddress { get; set; }
public int TimeZoneShift { get; set; }
public string Param1 { get; set; }
public string Param2 { get; set; }
public string Param3 { get; set; }
public string Param4 { get; set; }
public string Param5 { get; set; }
public string Param6 { get; set; }
} -
Mettre à jour le contrôleur d'accueil
Remplacez la classe HomeController par la suivante:
public class HomeController : Controller
{
private static List<UserlockNotification> _notifications = new List<UserlockNotification>();
private static List<string> _userLockIds = new List<string>();
public ActionResult Index()
{
Response.AddHeader("Refresh", "3");
ReadUserlockIds();
return View(_notifications);
}
private void ReadUserlockIds()
{
string ids = ConfigurationManager.AppSettings["UserlockIds"];
_userLockIds = ids.Split(new char[] { ';' }).ToList();
}
[HttpPost]
public ActionResult Notify()
{
try
{
string data = GetPostData(Request.InputStream);
UserlockNotification ul = JObject.Parse(data).ToObject<UserlockNotification>();
// Is the notification sender valid?
// Uncomment the following lines to add a security check
// between the webhook application and UserLock service
// if (!_userLockIds.Contains(ul.Userlock.Id))
// return new HttpStatusCodeResult(HttpStatusCode.OK);
// Truncate Userlock Id to avoid displaying sensitive information
ul.Userlock.Id = ul.Userlock.Id.Substring(1,8);
_notifications.Add(ul);
}
catch (Exception ex)
{
}
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
private static string GetPostData(Stream inputStream)
{
string data = null;
StreamReader reader = new StreamReader(inputStream);
try
{
reader.BaseStream.Position = 0;
data = reader.ReadToEnd();
}
finally
{
reader.BaseStream.Position = 0;
}
return data;
}
public ActionResult About()
{
return View();
}
public ActionResult Contact()
{
return View();
}
public ActionResult GoToWebsite()
{
return Redirect("https://www.isdecisions.com");
}
}Pour corriger les déclarations d'utilisation manquantes, cliquez avec le bouton droit de la souris sur chaque erreur et sélectionnez l'action appropriée. Celles-ci se trouvent dans le sous-menu ‘Quick Actions and Refactoring’.
L'en-tête Actualiser dans la méthode Index permet d'actualiser automatiquement la page d'accueil afin que les notifications entrantes soient affichées par blocs.
La méthode Notify désérialise la notification UserLock en une instance UserLockNotification.
Nous avons choisi d’ajouter la méthode Notify dans le contrôleur domestique pour plus de commodité. Vous pouvez bien sûr décider de créer une méthode différente dans un autre contrôleur (mycontroller/mymethod)
-
Vérification de sécurité
Le contrôle de l'ID UserLock vous évite de recevoir des notifications de sources non valides. Ainsi, il est possible de définir une liste de GUID dans le fichier web.config afin de déclarer une liste blanche d’ID UserLock et de s’assurer que toutes les notifications reçues proviennent d’une source approuvée.
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
<add key="UserlockIds" value="{your_userlock_guid1};{your_userlock_guid2};" />
</appSettings>Remarque: si vous avez déployé un serveur de sauvegarde UserLock, n’oubliez pas d’ajouter l’ID du serveur de sauvegarde UserLock à cette liste.
Ensuite, vous pouvez supprimer les lignes de commentaire dans la méthode Notify. De cette façon, seules les notifications envoyées par les serveurs UserLock déclarés seront traitées.
// Is the notification sender valid?
// Uncomment the following lines to add a security check
// between the webhook application and UserLock service
if (!_userLockIds.Contains(ul.Userlock.Id))
return new HttpStatusCodeResult(HttpStatusCode.OK);Comment sécuriser vos notifications webhook
La réception de notifications de sources non autorisées peut poser problème si un utilisateur malveillant a décidé de duper votre application. Pour résoudre ce problème, les notifications JSON envoyées par le service UserLock contiennent un champ ‘UserLock ID’ qui garantit que toutes les notifications reçues proviennent d’une source approuvée.
À ce stade, veuillez comprendre que si un filtre "UserLock ID" est appliqué, toutes les notifications envoyées par un serveur non autorisé seront rejetées. Le champ "UserLock ID" est le secret entre votre application et UserLock. Si un membre de votre organisation partage ce secret, ce qui le compromet, vous pourrez le modifier (voir la section Réinitialisation de la valeur "UserLock ID"). Cependant, chaque fois que le champ "UserLock ID" est réinitialisé, la liste blanche des identifiants Userlock des applications Webhook pouvant recevoir des notifications JSON doit être mise à jour, car le nouvel identifiant UserLock sera à nouveau inconnu.
Remarque: si vous avez déployé un serveur de sauvegarde UserLock en plus du serveur principal, n’oubliez pas d’ajouter son propre ‘ID UserLock’ à cette liste blanche.
Obtention de la valeur ‘UserLock ID’
Pour récupérer le champ «UserLock ID», ouvrez une console Powershell sur le serveur sur lequel UserLock est en cours d’exécution et entrez la commande suivante:
Get-UserLockServerConfiguration -Property 'ServerGuid'
Réinitialisation de la valeur "UserLock ID"
Pour réinitialiser le champ «UserLock ID», ouvrez une console Powershell sur le serveur sur lequel UserLock est en cours d’exécution et entrez la commande suivante:
(Get-UserLockServerConfiguration).ResetGUID()
Important! Vous ne devez effectuer cette opération que dans de rares cas. Par exemple, lorsque l'ID utilisateur est compromis, cela permettrait aux sources non fiables d'envoyer des notifications JSON à votre application webhook. La réinitialisation du champ «UserLock ID» signifie que toutes les applications client Webhook doivent être mises à jour pour que le nouveau secret soit accepté (comme expliqué précédemment).
-
Mettre à jour la vue Home Index.cshtml
Remplacez la vue Index.cshtml par la suivante (remplacez l'espace de noms en rouge par le vôtre):
@model IEnumerable<UserLockWebHook.Models.UserlockNotification>
@{
ViewBag.Title = "Home Page";
}
@if (Model != null)
{
<table width="700">
<tr>
<td width="15%">
<b>Event Type</b>
</td>
<td width="35%">
<b>Event Time </b>
</td>
<td width="25%">
<b>User </b>
</td>
<td width="25%">
<b>Computer </b>
</td>
</tr>
@foreach (UserLockWebHook.Models.UserlockNotification item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.EventType)
</td>
<td>
@Html.DisplayFor(modelItem => item.EventTime)
</td>
<td>
@Html.DisplayFor(modelItem => item.UserFullName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ComputerName)
</td>
</tr>
}
</table>
}
else
{
@Html.Label("No notifications")
} -
Construire l'application
L'application doit compiler correctement à cette étape.
-
Publier dans Azure
Cliquez avec le bouton droit de la souris sur le nœud de la solution et sélectionnez ‘Publish’.
Sélectionnez ‘Microsoft Azure App Service’ et cliquez sur le bouton Publish. Remplissez les champs à l'aide de votre propre abonnement Azure et publiez.
Pour suivre étape par étape plus en détail ce sujet, veuillez lire la documentation de Microsoft Azure ici (page en anglais).
Votre navigateur doit maintenant afficher le site Web suivant:
-
Ajouter des notifications Webhook à UserLock
Ouvrez la console UserLock, cliquez avec le bouton droit sur votre serveur et sélectionnez Propriétés.
Faites défiler jusqu'à la section des notifications Webhook:
Entrez l’url de votre application Web en ajoutant ‘/Home/Notify’ (ou ‘/mycontroller/mymethod’ si vous avez choisi un autre contrôleur / méthode).
-
Tester que l'application Web est correctement déployée pour recevoir les notifications UserLock
Générez des événements de session sur votre réseau:
Verrouillez une session existante et attendez quelques instants que la notification apparaisse dans l'application Web.
Comment utiliser et personnaliser le Webhook
Une liste de tous les champs enregistrés peut être trouvée ici.
Après avoir lu cette documentation, vous pourrez savoir quelles données vous intéressent le plus et pour quels événements de session vous souhaitez écrire du code dans votre compte Webhook (par exemple, un appel aux méthodes de l'API UserLock).
En savoir plus sur l’audit complet de la connexion et les restrictions d’accès de UserLock.
Téléchargez une version d'essai entièrement fonctionnelle de 30 jours de UserLock