在 .Net 中使用 Active Directory 进行授权

Posted

技术标签:

【中文标题】在 .Net 中使用 Active Directory 进行授权【英文标题】:Using Active Directory for Authorization in .Net 【发布时间】:2011-08-09 15:28:51 【问题描述】:

除了使用 System.DirectoryServices.AccountManagement 执行基本 AD 功能的简单代码示例之外,是否有通用指南或者有人可以发布自己的关于将 .net 与应用程序集成的指南?我有一个独立的项目数据库。

项目可以分配给用户。我应该将 UserPrincipleName、专有名称、GUID 或 SID 存储在数据库中吗?

项目的某些部分仅限于特定部门的员工。我是否为每个部门创建一个简单的 AD 组?我应该支持某种本地缓存还是多个 IsMemberOf 调用?

我应该如何处理像 CanDoSomething 这样更精细的权限。我应该嵌套更多组吗?

【问题讨论】:

ObjectGUID 是所有这些的不可变属性,所以这就是您想要的。 【参考方案1】:

如果您的应用程序和使用它的用户都在同一个 LAN 上,我肯定会推荐使用直接 Windows Auth。

即:

为您应用中的每组用户(普通用户、演示用户、管理员)创建一个 Windows/AD 安全组 - 可以由任何 Windows/AD 管理员管理和处理(无需特殊工具/UI需要的东西)

在您的代码中,使用当前 WindowsPrincipal 上的 IsInRole 方法来确定当前用户是否处于特定角色(或不是)

更精细的权限:这完全取决于您;有一些像 AzMan 这样的“开箱即用”解决方案,但似乎没有一个真正被大量使用 - 我们大多使用某种两层或三层方法(用户 - 配置文件 - 权限)“推出我们自己的”在数据库中管理并在我们的应用程序中进行管理

AD 对象的名称可能会更改 - 因此我不会将其用作我唯一且稳定的参考。 GUID 或 SID 都是固定的,不会更改 - GUID 更是如此(SID 在某些情况下可以合并,因此可能会更改 - 对于组来说更多,但仍然可能)

【讨论】:

谢谢。在大多数情况下,我计划创建一堆组,但 azman 看起来很有希望。

以上是关于在 .Net 中使用 Active Directory 进行授权的主要内容,如果未能解决你的问题,请参考以下文章

AD Tools

如何在 Active Directory 中获取用户的组? (c#, asp.net)

在 ASP.NET Core 2.0 中使用带有身份模型的 Azure Active Directory OAuth

尝试从 Azure AD 获取访问令牌时获取响应代码 400

在 .NET 中的 Active Directory 组中添加和删除用户

在 .NET Core 1.0 应用程序中针对 Active Directory 进行身份验证?