首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何验证我的应用程序在其中运行的active directory域?

如何验证我的应用程序在其中运行的active directory域?
EN

Stack Overflow用户
提问于 2012-10-15 22:11:47
回答 2查看 584关注 0票数 7

我有一个VB.Net应用程序,它使用当前的Windows用户进行身份验证,而不需要询问密码。它会在启动前检查该用户是否为"MYDOMAIN\ApplicationUsers“的成员。

如何检查这是否是真实域名,而不是使用相同名称的不同域名?是否有要在本地验证的证书或公钥?我更喜欢离线检查,没有第三方机器或数据库等。

在System.DirectoryServices.ActiveDirectory命名空间中有一些信任和验证方法,但它们似乎只检查域间信任,并且只使用域名。

EN

回答 2

Stack Overflow用户

发布于 2014-09-25 04:18:59

您的问题是,您使用的字符串和mydomain/application用户跨域的字符串并不是唯一的。一种可能是使用预期域中应用程序用户组的SID,而不是名称。然后,在检查成员资格之前,您可以检查组的SID,以确保它在运行时与预期的应用程序用户组的sid匹配。恶意用户将更难伪造Sid的域和组部分,而不是域名和组名。

最终,如果你在恶意用户拥有的机器上运行代码,那么这只会提高门槛,他们仍然可以绕过这一检查。

票数 1
EN

Stack Overflow用户

发布于 2015-03-24 22:23:40

我做了一些示例代码,按照Mike的建议检查组的SID。您只需将组的SID放入SecurityIdentifier类的构造函数中,就可以对当前登录的用户执行检查。

代码语言:javascript
复制
Private Sub DoCheck()
    Dim sid As New Security.Principal.SecurityIdentifier("S-0-0-00-0000000000-0000000000-0000000000-000"),
        result As Boolean
    result = IsUserInGroup(sid)
End Sub

Public Shared Function IsUserInGroup(sid As Security.Principal.SecurityIdentifier) As Boolean
    Dim user As UserPrincipal
    user = UserPrincipal.Current
    For Each group As Principal In user.GetGroups()
        If group.Sid.Equals(sid) Then Return True
    Next
    Return False
End Function

要使代码正常工作,需要导入System.DirectoryServices.AccountManagement

代码语言:javascript
复制
Imports System.DirectoryServices.AccountManagement

这个命名空间位于微软的System.DirectoryServices.AccountManagement.dll中,我相信从.Net 4.0开始就可以使用它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12897494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档