问题标签 [windows-principal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 如何获取 Active Directory 用户列表(仅显示在 Windows 登录屏幕中的用户)
如何获取 Active Directory 用户列表(仅显示在 Windows 登录屏幕中的用户)
我尝试了许多使用 Windows Principle 库和 WMI Select 命令的方法。我不断收到管理员、访客和其他一些 VUSRNEIL-DELL。这 3 个用户帐户都不会出现在登录屏幕上。如何区分这些用户类型?
asp.net-mvc-3 - MVC3 Windows Authentication override User.Identity
I am building a intranet application using MVC3 with a MSSQL backend. I have authentication and roles (through a custom roles provider) working properly. What I am trying to do now is overriding User.Identity to allow for items like User.Identity.FirstName. But I cannot find any code that will show me how do this in WindowsIdentity
I have tried writing a custom provider:
and overriding the WindowsAuthentication to populate the custom principal.
I have a breakpoint in the authentication function and the principal is being populated; however, when I put a breakpoint in the controllers, the User is just its normal RolePrincipal, instead of my custom principal. What am I doing wrong?
EDIT:
I commented out the code above in the global.asax. I have overridden the AuthorizeAttribute using C#:
And adjusted my principal to the following:
Now I when I put a breakpoint in, the watch shows the following in user:
- User
- [CSupport.Model.CPrincipal]
- Identity
Identity is accessable; however, it is still the WindowsIdentity CPrincipal is only accessible in the watch and not accessible directly.
EDIT: Thanks to everyone who contributed to this. You have greatly expanded my understanding of how the various parts work.
I got both ways to work, so I thought I would share.
Option 1: Override the Authorize Request in Global.asax
This is the one I am going with.
I did not use Application_AuthenticateRequest because (according to this: HttpContext.Current.User is null even though Windows Authentication is on) the user has not been populated in a Windows authentication process and thus there is nothing that I can use to go get the user information.
Application_AuthorizeRequest is the next in the chain and happens after the windows identity is brought in.
This is the override of the Principal
This is how you access the updated info in the new Principal that was created.
Option 2: Override the AuthorizeAttribute
This is the overridden Principal (It is the same as above)
Here is the override of the Authorize Attribute
This is where you change which AuthorizeAttribute to use and utilizing the new information.
Option 1 handles everthing globally, option 2 handles everything at an individual level.
dns - 未连接到域时如何获取 Active Directory 域组列表
在我的公司,我们有一个定制的 HMI。如果用户愿意,这个 HMI 可以使用计算机的域登录。这是我们目前正在尝试解决的场景
用户以域用户身份登录 Windows 后,他们使用相同的 Windows 凭据登录 HMI - 一切顺利。
网络连接中断,用户重新启动计算机。
用户可以像以前一样使用相同的域登录方式登录到 Windows(Windows 缓存用户允许这样做)
用户尝试登录我们的 HMI,但他们不能,因为我还没有弄清楚如何访问这些缓存的活动目录用户。
这是我现在用来检测用户是否是允许登录 HMI 的组之一的代码。这些组存储在我们的 SQL 数据库中,并存储为字符串SERVER\BUILDER
,例如
IsInRole
问题是当用户未连接到域时,我在该方法上遇到异常。我查看了方法中的重载,并尝试使用与 user.Group 等效的 SID 而不是文字字符串。这似乎可行,但现在又出现了另一个问题。当用户不在网络上时,我无法将组名(来自 SQL 的字符串)转换为这些 SID。
我目前的解决方法是,当用户连接到域时,我将 SID 和组保存到查找表(加密)中,然后当网络未连接时,我从数据库中获取组名并逐字查找 SID表中的字符串。
我用来将组名转换为 SID 的代码如下
然后我像这样查找组名
不在网络上时我无法将组名转换为 SID 的原因是IdentityReference.Translate
因为它看不到域而引发异常。
所以,在所有这些解释之后,这就是我正在寻找的东西。我在想我必须在某个地方访问才能从组名中获取 SID,因为 Windows 必须将它存储在某个地方,否则在未连接到网络时我将无法登录到 Windows。
我进行了大量搜索,但无法弄清楚这些缓存凭据的存储位置。任何帮助将不胜感激,如果我不够清楚,请告诉我,我会尽力解释。
windows - 使用 `GetUserNameEx` 获取计算机主体名称
我试图获取Network Service
使用以下代码运行的服务的计算机主体名称。
由于我的计算机的域名是Service-Windows@example.com
,我希望结果buffer
是相同的。但是,返回的服务主体名称是WIN-SC4RKQUKM4D@example.com
. 我确定我已经更改了我的计算机并将其添加到域中example.com
。
我不知道异常的主体名称。可能是什么问题?任何提示将不胜感激。
更新
我在域控制器上运行服务,不知道这是否会干扰结果。
感谢你并致以真诚的问候!
c# - 如何从 DOMAIN\user 格式的用户名创建 WindowsIdentity/WindowsPrincipal
WindowsIdentity(string)
构造函数要求用户名的格式username@domain.com
。但就我而言,我从数据库中以旧DOMAIN\user
格式获取用户名(然后必须检查他们的 Windows 角色成员资格)。
WindowsPrincipal
从旧式(sAMAccountName)用户名创建的最佳方法是什么?
asp.net-mvc-4 - 在中扩展 WindowsIdentity/WindowsPrincipal
我在 MVC 4、ASP.NET 4.5 和 Windows 身份验证中有一个应用程序。我正在尝试扩展 Identity 和 Principal 对象(分别为 WindowsIdentity 和 WindowsPrincipal )以提供有关登录用户的其他信息,但是当我尝试创建这些对象的扩展实例并替换 Current.User 时,它会抛出一个错误:
在我在 global.asax 中使用的代码下方:
这是 web.config 设置:
在我的本地 IIS 中,我以这种方式设置了身份验证:
- 匿名:已禁用
- 基本:禁用
- Windows 身份验证:已启用
- 表单身份验证:已禁用
- ASP.NET 模拟:已禁用
c# - 查找指定的用户(字符串)是否是本地管理员组的成员
我正在尝试查找我识别的用户是否是本地管理员组的成员。
但是我的代码什么也没做...
请看我下面的代码。
此外,这是在我的程序中执行的,public void Form1_Load(object sender, EventArgs e) {}
因此每次在应用程序启动时都会执行。
c# - Thread.CurrentPrincipal.Identity 在 firstTime 中设置后更改
我有一个简单的 wpf 示例(一个带有按钮的窗口)。我在构造函数中设置了 Thread.CurrentPrincipal,例如:
我看到 Thread.CurrentPrincipal 是正确的。
我在 buttonclick 事件中放置了一个断点。单击按钮后,我检查 Thread.CurrentPrincipal 但它发生了变化,我的身份名称为空
c# - User.IsInRole(string) 和多个域
我一直在使用 WindowsPrincipal.IsInRole(string) 来检查用户是否可以访问某些控制器功能并且一切运行良好。一项新要求意味着来自第二个域的用户需要访问 Intranet 站点,因此在第二个域中创建匹配的 AD 组并将这些用户分配到这些组。
这些用户可以连接,但他们的访问是断断续续的 - 有时他们获得了受限的视图,有时他们没有。值得注意的是,当他们连接来自原始域的用户时,他们似乎失去了对受限视图的所有访问权限。
原始代码看起来有点像这样(注意没有域前缀):
最初来自 AD1\GroupName1 的用户获得了视图 GroupName1,但是一旦来自 AD2\GroupName1 的用户连接了原始用户,就会使用 GroupNameNone 视图。随着人们连接/断开哪个用户通过检查,似乎发生了变化。
所以我的问题是这里发生了什么?是否正在查找组名并在后台缓存(或类似)SID?这似乎很合适,因为缓存的 SID 会随着来自不同域的用户连接而改变。
我还假设(但还不能测试)在检查前加上域(如下所示)将解决问题,是否有人对此有意见,或者我们是否需要在不同域中创建不同命名的 AD 组?
领域特定代码:
非常感谢您的帮助。
c# - IsInRole 获取新的安全令牌
我正在使用 WindowsPrincipal 的 IsInRole 方法来检查 WPF 和 Winforms 应用程序中的组成员身份。我正在生成一个身份令牌,它可以用于任何 AD 用户(不一定是实际登录到计算机的用户 - 取决于我在做什么,我不一定要进行身份验证,我只使用基本信息级令牌(我认为它的正确名称是“身份令牌”)。
第一次在特定计算机上运行此代码时,操作系统会为指定的用户生成身份令牌。然后 IsInRole 函数使用该令牌来验证组成员身份。它很快,所以我真的很喜欢它。但是,创建 WindowsIdentity/WindowsPrincipal 的后续调用会引用现有令牌,而不是创建新令牌。我知道如何更新令牌的唯一方法是注销计算机或重新启动(这会清除令牌缓存)。有谁知道重置缓存身份令牌的更好方法?
示例代码 C#:
VB: