2

我有一个 C# 应用程序,它将使用企业 Active Directory 对一半用户进行身份验证,并为另一半用户使用自定义身份验证方法。

我已经设法使用 DirectoryEntry、DirectorySearcher 等对 AD 中的用户进行身份验证,并且我的自定义身份验证也正常工作。

但是,我想知道用户是否已经使用公司域登录了他的计算机,那么该用户将不会显示任何登录表单并且必须传递给应用程序。

我知道我可以使用WindowsIdentity.GetCurrent().IsAuthenticated,但是对于本地登录的用户和域登录的用户都返回“true”。

我想知道如何区分第一个和最新的。

(注意:这是一个桌面应用程序)

4

1 回答 1

1

我还维护了一个 winforms 桌面应用程序,它为办公室用户使用活动目录并支持非办公室用户。

这可能比你的要求要多,但因为我和你有相同的场景,所以无论如何我都会提供它,因为它以一种很好的方式组合在一起,我真的没有写太多代码并且一直运作良好。

我敢肯定,其他人可能会用一个包裹而不是自己滚动来做到这一点——老实说,下次我有这个要求时,我可能会走那条路……

这里是:

从概念上讲,我从 ASP.NET 中得到启发,并将安全性分为两个逻辑部分:

身份验证- 这个用户是谁?

授权- 用户可以这样做吗?

我的实现使用了一个简单的数据库:

在此处输入图像描述

这是我的应用程序主要形式的一个片段:

    public EOMForm()
    {
        InitializeComponent();

        // Show the connection string when hovering over the database label (Test Mode Only)
        if(Properties.Settings.Default.TestMode)
            this.toolTip1.SetToolTip(this.databaseLabel, EomAppCommon.EomAppSettings.ConnStr);

        // Security
        DisableMenus();
    }

    private void DisableMenus()
    {
        // Disable individual menu items
        foreach (var menuItem in this.TaggedToolStripMenuItems())
            menuItem.Enabled = Security.User.Current.CanDoMenuItem((string)menuItem.Tag);

        // Apply disabled color to top level menus that have all their items disabled
        foreach (var menu in menuStrip1.DisabledMenus())
            menu.ForeColor = SystemColors.GrayText;
    }

是支持的实用程序代码

最后,我使用 ASP.NET 脚手架站点对其进行管理:

在此处输入图像描述

于 2012-12-06T23:28:21.770 回答