• <menu id="w2i4a"></menu>
  • logo UserLock教程

    文檔首頁>>UserLock教程>>Windows網(wǎng)絡(luò)守門人UserLock教程:UserLock Webhook通知(上)

    Windows網(wǎng)絡(luò)守門人UserLock教程:UserLock Webhook通知(上)


    UserLock是您的Windows網(wǎng)絡(luò)守門人,它可以輕松實現(xiàn)有效的Windows和Active Directory網(wǎng)絡(luò)用戶訪問控制策略,并嚴(yán)格執(zhí)行。    

    最新版UserLock免費下載


        本文將會介紹有關(guān)如何部署能夠在Microsoft Azure中接收用戶鎖通知的Web應(yīng)用程序的分步指南。Webhooks使Web應(yīng)用程序可以實時訂閱UserLock中發(fā)生的關(guān)鍵訪問事件。本文分為上下兩部分,此為上文。(點擊此處可以查看下文)

        會話事件(如登錄,注銷,鎖定,解鎖,拒絕登錄等)作為JSON消息發(fā)送到Web應(yīng)用程序。然后可以根據(jù)特定的訪問事件構(gòu)建自定義工作流。結(jié)合UserLock API,它還允許為特定用戶配置文件動態(tài)創(chuàng)建永久或臨時限制,以響應(yīng)特定事件。

    先決條件

    安裝Visual Studio 2017:

    • ASP.NET和Web開發(fā)

    • Azure開發(fā)

    安裝visual studio 2017

    創(chuàng)建UserLockWebHook MVC Web應(yīng)用程序

    • 在Visual Studio中,通過選擇File(文件)>New(新建)>Project(項目)來創(chuàng)建一個項目。

    • New Project(新建項目)對話框中,選擇Visual C#>Web>ASP.NET Web應(yīng)用程序(.NET Framework)。

    創(chuàng)建userlockwebhook mvc Web應(yīng)用程序

    選擇MVC模板

    • 選擇MVC模板,并確保將身份驗證設(shè)置為No Authentication(無身份驗證)。

    選擇MVC模板

    更新所有NuGet軟件包并安裝NewtonSoft.Json軟件包

    • 打開工具->NuGet數(shù)據(jù)包管理器->管理該解決方案的NuGet軟件包。

    • 打開更新標(biāo)簽,選中Select all packages(選擇所有軟件包)復(fù)選框,然后單擊更新按鈕。

    • 打開瀏覽選項卡,在搜索字段中輸入Newtonsoft.Json并安裝軟件包。該軟件包將用于反序列化UserLock發(fā)送的通知。

    在模型文件夾中創(chuàng)建以下類

        這些類還將在反序列化過程中使用。(下載UserLock可嘗試操作)

    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; }
    }

    更新HomeController

        用以下內(nèi)容替換HomeController類:

    public class HomeController : Controller
    {
    private static List _notifications = new List();
    private static List _userLockIds = new List();
    
    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();
    
    // 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");
    }
    }

        要修復(fù)丟失的using語句,請右鍵單擊每個錯誤,然后選擇適當(dāng)?shù)牟僮?。這些可以在快速操作和重構(gòu)子菜單中找到。

        使用Index方法中的Refresh標(biāo)頭可以自動刷新主頁,以便按塊顯示傳入的通知。Notify方法將UserLock通知反序列化為UserLockNotification實例。為了方便起見,選擇在HomeController中添加Notify方法。您當(dāng)然可以決定在另一個控制器(mycontroller / mymethod)中創(chuàng)建其他方法。

    安全檢查

        控制UserLock ID可確保您避免從無效來源接收通知。因此,可以在web.config中定義一個GUID列表,以聲明白名單的UserLock ID,并確保所有收到的通知均來自受信任的來源。

    <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>

    注意:如果您已經(jīng)部署了UserLock備份服務(wù)器,請不要忘記將UserLock備份服務(wù)器ID添加到此列表中。

        然后,您可以在Notify方法中取消注釋行。這樣,僅處理聲明的UserLock服務(wù)器發(fā)送的通知。

    // 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);

    =========================================

    想要了解或購買UserLock正版版權(quán),請咨詢慧都官方客服

    更多精彩內(nèi)容,歡迎關(guān)注下方的微信公眾號,獲取更多產(chǎn)品咨詢

    慧聚IT

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();