Winform通过活动目录进行用户授权

2024-03-03

我遇到一种情况,在我的应用程序中执行任务之前,我使用以下代码来验证 AD 中的用户成员身份

using System.Security.Principal;
WindowsIdentity  identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole("someGroup");

上面的代码对于我的域中的计算机运行良好,但是我确实有一些不在我的域中但安装了 WINFORM 应用程序的计算机。如何验证 AD 中的用户成员身份?

编辑-有没有办法提示Windows登录?


由于您的计算机根本没有加入域,因此我们无法使用 WindowsIdentity 或 WindowsPrincipal 然后检查其 IsInRole() 方法。仅当您的计算机加入域并且它使用您的域计算机帐户执行 S4USelf 时,IsInRole() 方法才有效。

您也不能使用 LogonUser 方法,因为您的计算机不允许您从不受信任的林创建登录会话。

我想我们只能直接查询Active Directory来获取我们想要的信息。据我所知,您发布的 Microsoft 知识库中的代码运行得不太好。它正在尝试从 memberOf 属性进行查询。组信息并不总是可以从 memberOf 属性中获得。

我刚刚使用 AccountManagement 编写了一个 IsInRole() 函数。我想这就是你想要的。 IsInRole() 函数将调用递归函数 IsInGroup() 来找出用户所属的所有组。

private bool IsInRole(string domain, string username, string password, string role)
{
    using (var context = new PrincipalContext(ContextType.Domain, domain, username, password))
    {
        GroupPrincipal group = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, role);
        UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, username);
        return IsInGroup(user, group);
    }
}

private bool IsInGroup(Principal principal, GroupPrincipal group )
{
    if (principal.IsMemberOf(group))
        return true;

    foreach (var g in principal.GetGroups())
    {
        if (IsInGroup(g, group))
            return true;
    }

    return false;
}

要使用此 IsInRole() 函数,您需要提供您的域名和域凭据。如果提供的用户名和密码错误,您将收到异常。

您需要 .NET 3.5 SP1 才能使用 AccountManagement API。另外,您可能还想关注这个hotfix http://support.microsoft.com/kb/969166。如果在某些环境中运行,AccountManagement API 会出现一些错误。您可能需要应用修补程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Winform通过活动目录进行用户授权 的相关文章

  • C# winforms Toolstrip Dropdown with toolstripcontrolhost 第一次在 (0,0) 位置打开

    我有绑定导航器控件 其中包含 5 个项目 其中包括一个工具条向下按钮 我以编程方式添加一个包含面板的toolstripcontrolhost 到toolstripdownbutton 当我第一次打开下拉菜单时 它显示在位置 0 0 在第二次
  • C# usercontrol如何访问所有子控件

    我定义了一个自定义面板 里面有一个表格布局面板 但是 当我在 winform 上使用此控件时 我无法访问表布局面板属性 例如 我想在单元格中添加一列或停靠其他控件 我尝试将修饰符属性更改为public 但仍然不起作用 我该怎么做才能查看和更
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 如何删除气球工具提示上的“扳手”按钮? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 双击定时器事件

    我正在开发一个应用程序 将用户的眼球运动与光标运动映射起来 从而开发一个免提光标控制系统 我正在使用 Open CV 库的 NET Wrapper for C 即 Emgu CV 进行开发 我被困在想要打开文件 文件夹的地方 这样当光标放在
  • 工具提示出现在表单/窗口后面! (C#/VS 2008)

    由于某些奇怪的原因 我在 VS 2008 C winforms 应用程序中的工具提示显示在表单后面 这非常令人沮丧 我不知道我应该做什么 有人遇到过这个吗 有想法吗 PS 我正在表单中以编程方式执行 toolstip show 您可能需要检
  • 在 WinForm DataRepeater C# Power Pack 中处理按钮单击

    我想处理DataRepeater中winform按钮的点击 我该怎么做 所有按钮都放置在 DataRepeater 中 非常感谢 在 Visual Studio Designer 中 双击该按钮 然后您将获得空的事件处理程序方法 在那里添加
  • 检测用户是否正在滚动 dataGridView 滚动条

    我正在更新一个dataGridView与一个新的数据表使用 dataGridView1 DataSource table 但是 我不想在用户滚动 dataGridView 时执行此操作 如何检查滚动条是否正在滚动或已完成滚动 即拖动而不是单
  • 查询计算机列表 - 输出上次登录用户和上次登录日期

    我正在创建一个脚本来从 txt 文件中检索所有计算机名称 然后对它们进行查询 计算机名 用户名 最后登录计算机的用户名 上次登录 使用的日期 这就是我所拥有的 Clear Host machines Get Content Path C U
  • 如何在Windows窗体中平滑地重新绘制Panel

    如何将面板重漆成光滑的 我正在使用一个使面板无效的计时器 panel1 Invalidate 每 300 毫秒一次 然后panel1 Paint如果我向该面板添加图像 问题是它看起来像是在跳跃 我需要尽可能快地移动其上的一张图像 这是截屏问
  • 在 WinForms 上使用 async/await 访问 Task.Run 中的 UI 控件

    我在 WinForms 应用程序中有以下代码 其中包含一个按钮和一个标签 using System using System IO using System Threading Tasks using System Windows Form
  • Windows 窗体:显示自适应省略号的单元格换行模式

    我正在使用 Windows 窗体 Datagridview 来显示一些 长 文本 代码是PowerShell 但问题与Cell Wrapping模式有关 TestGridView New Object System Windows Form
  • ScrollableControl 在整个控件周围绘制边框

    我正在构建基于的自定义用户控件ScrollableControl 现在我正在尝试在控件周围添加边框 类似于 DataGridView 的边框 我可以使用以下方法绘制边框 e Graphics TranslateTransform AutoS
  • C# - Winamp 风格 3 窗口捕捉应用程序

    如何在 C 和 net 2 0 中创建 Winamp 风格的多表单捕捉应用程序 Easy 创建三个表格 添加代码以自定义绘制一切在这三种形式上 添加逻辑来处理用户在任何表单上的任意位置单击和拖动 以便窗口正常移动 直到它与您自己的另一个表单
  • VS2008 针对 .NET 2.0 并没有阻止我使用 C# 3 功能

    我有一个 VS2005 解决方案 并且想在新的一年中摆脱 VS2005 我对升级过程非常满意 并且惊喜地发现我的构建脚本大部分仍然有效 我的问题是围绕多目标功能 我的服务器上没有安装 NET 3 5 因此我必须继续以 NET 2 0 为目标
  • 如何使用 C# 将 Windows 窗体面板作为位图获取?

    我有一个 Windows 窗体 其中一个面板上有多个控件 面板并不占据所有的表单空间 而只占据一小部分 我想知道是否有某种方法可以将面板 带有所有子控件 的显示检索为位图 就像屏幕截图一样 但仅裁剪到面板 我没有查看屏幕截图 因为面板位于可
  • WinForms 应用程序设计 - 将文档从 SQL Server 移动到文件存储

    我有一个连接到 SQL Server 的标准 WinForms 应用程序 该应用程序允许用户上传当前存储在数据库中的文档 在使用图像列的表中 我需要更改这种方法 以便将文档存储为文件 并将文件的链接存储在数据库表中 使用当前的方法 当用户上
  • 在 DataGridView 中隐藏行非常慢

    我在 Winforms 应用程序中有一个 DataGridView 大约有 1000 行 未绑定 和 50 列 隐藏一列需要整整 2 秒 当我想隐藏大约一半的行时 这就成为一个问题 private void ShowRows string
  • 如何填充两个样条线或直线系列之间的区域

    我有这个Chart 如何填充两个之间的区域Series S0 and S1 说蓝色和黄色Series 为此 我们编写了其中之一Paint事件 这里的ValueToPixelPosition https msdn microsoft com
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方

随机推荐

  • (NextAuth) 类型错误:类型“{}”上不存在属性“会话”

    我在 NextJs 项目上使用 NextAuth 时收到错误 Type error Property session does not exist on type 我正在添加session按照此处的建议将属性添加到我的 app tsx 中
  • 四组设计模式如何融入 MVC 范式?

    我仔细考虑过设计模式一段时间以来 我刚刚开始考虑如何真正开始将其中一些更有意地融入到我的开发工作中 然而 我仍然对他们在本书开头对 MVC 的处理以及它与本书其余部分的关系感到困惑 我使用过的大多数框架 Spring Yii ASP NET
  • AWS Cognito - JavaScript 中的开发人员身份验证(浏览器)

    我在浏览器脚本中获取凭据时遇到问题 身份验证服务器返回 cognito identityId 和 cognito token 然后我设置了一个Cookie cookie cognitoidentityId cookie cognito to
  • 如何为弹跳球创建碰撞检测?

    我已经为三个沙滩球在屏幕上弹跳编写了一个动画 用Python 我现在希望它们全部碰撞并能够相互弹开 我非常感谢您能提供的任何帮助 import pygame import random import sys class Ball def i
  • 准备好使用移动应用程序的后端了吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从 github 添加厨师食谱

    我使用以下命令从 opscode 网站下载了许多食谱 Knife Cookbook网站安装git例如 但是现在我想从 github 上的存储库下载一本说明书到我当前的说明书目录中 我该怎么做呢 我应该将存储库克隆到我的食谱目录中吗 谢谢你
  • 在 javax.scripting javascript 环境中导入地图

    我在 javax scripting 地图实现中看到一些奇怪的行为 在线示例显示example http java sun com developer technicalArticles J2SE Desktop scripting 添加到
  • 两个对象上的 Linq 完全外连接

    我有两个名为 CountryMobility 的对象 我相信我需要将它们与完整的外部联接结合起来 我该如何使用 linq 来做到这一点 public class CountryMobility public string countryCo
  • 评论解释的代码和性能

    我总是 尽力 评论我的代码 我已将服务器配置为在交付前删除这些注释 额外的空白 在实时系统代码 Javascript php 中不要添加注释 从而减少这种开销或者删除或解释是否会更好 如果是这样 我怎样才能鱼与熊掌兼得呢 对于 PHP 来说
  • UIScrollView 与居中的 UIImageView,如照片应用程序

    我想要带有图像内容视图的滚动视图 该图像实际上是比屏幕大得多的地图 地图最初应位于滚动视图的中心 就像当您将 iPhone 转向横向时照片应用程序中的照片一样 我没有设法将地图置于中心并同时进行正确的缩放和滚动 假设地图图像从屏幕顶部开始
  • 在spark中设置textinputformat.record.delimiter

    在 Spark 中 可以设置一些 hadoop 配置设置 例如 System setProperty spark hadoop dfs replication 1 这有效 复制因子设置为 1 假设是这种情况 我认为这种模式 在常规 hado
  • 以编程方式检测 Android 中的 USB 连接类型

    是否可以以编程方式检测 USB 连接的类型 是否仅充电 MTP PTP 等 我知道如何检测它是否已连接 几乎每个线程都在谈论这一点 我尝试寻找一些 Intent 事件来注册接收器 但找不到任何合适的事件 注意 我不想以编程方式更改它 我想在
  • 如何将 Sprite 纹理更改为动画

    我有一个每秒生成的精灵 我不想做的是将精灵纹理更改为动画 并且当它被触摸时它将恢复为正常纹理 public void draw SpriteBatch batch enemyIterator enemies iterator arrayli
  • 我可以选择第 n 个 css 列吗?

    我有一个div有 4 个 CSScolumns我想选择第三列和第四列以使文本稍微变暗 因为文本和文本之间没有很好的对比度background image 这可能吗 我可以接受任何 css 或 js 解决方案 这是demo http jsfi
  • Jfreechart - 多个 XY 图表的任何选项(如多重饼图)?

    有没有类似于 multiPiePlot Chart 但用于 xy 图的东西 我有一个应用程序需要在一页上打印两个或三个 xy 图 我知道您可以将多个数据集放在同一个绘图上 但要求指定每个数据集必须是同一页面上的单独图表 是的 只需添加您的C
  • 无法使用 NGXS 更新存储来修补状态。我不断看到类型错误:无法冻结

    我正在使用一个基本的 Angular 11 应用程序 该应用程序已实现身份验证 使用 AWS Cognito 和 Amplify 我在这里想做的事情非常简单 我正在使用内置的 AWS Amplify 方法进行身份验证 我正在使用 NGXS
  • 如何确保在子任务失败时调用 Celery 和弦回调?

    我在 Celery 中使用 Chord 来进行回调 当一组并行任务完成执行时会调用该回调 具体来说 我有一组函数来包装对外部 API 的调用 我想等待所有这些返回 然后再处理结果并在 Chord 回调中更新我的数据库 我希望回调在所有 AP
  • 在 JSON 响应中编码 HTML 特殊字符的安全优势

    我最近收到第三方的建议 出于安全原因 对所有服务器响应中的 HTML 特殊字符进行编码 所以 gt x27 gt x26 e g id 1 name Miles O x27 Brien 问题 这样做是否能带来安全收益 或者只是一种偏执 gt
  • 是什么让 `async/await` 语句在 ES6 中顺序运行与并行运行?

    我已经浏览过该线程wait Promise all 和多个await 之间有什么区别 https stackoverflow com questions 45285129 any difference between await promi
  • Winform通过活动目录进行用户授权

    我遇到一种情况 在我的应用程序中执行任务之前 我使用以下代码来验证 AD 中的用户成员身份 using System Security Principal WindowsIdentity identity WindowsIdentity G