标签: sid

给定用户的SID,我如何获得AD DirectoryEntry?

我在windowsPrincipal.getIdentity().getSid()中将用户的SID设置为byte [].如何从SID获取活动目录条目(DirectoryEntry)?

sid directoryentry

7
推荐指数
2
解决办法
1万
查看次数

如何提取计算机/机器SID?

我正在寻找一种使用Delphi代码提取计算机SID的方法.SysInternals有一个名为PsGetSid的工具可以做到这一点,但我不能在我的应用程序中使用它.我在Google上搜索了一个代码示例,找不到一个.

我怎样才能在Delphi中实现这一目标?

请帮忙.

delphi registry winapi sid

7
推荐指数
1
解决办法
5673
查看次数

获取机器SID(包括主域控制器)

我需要在C#中获取机器SID(不是计算机帐户的SID).计算机被指定为主机名,它不一定是本地计算机,它可以是域计算机或工作组计算机.我使用这个帮助器类来调用LookupAccountName API函数:

    private static class Helper
    {
        internal enum SID_NAME_USE
        {
            SidTypeUser = 1,
            SidTypeGroup,
            SidTypeDomain,
            SidTypeAlias,
            SidTypeWellKnownGroup,
            SidTypeDeletedAccount,
            SidTypeInvalid,
            SidTypeUnknown,
            SidTypeComputer
        }

        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool LookupAccountName(
            string systemName,
            string accountName,
            byte[] sid,
            ref int sidLen,
            System.Text.StringBuilder domainName,
            ref int domainNameLen,
            out SID_NAME_USE peUse);

        public static SecurityIdentifier LookupAccountName(
            string systemName,
            string accountName,
            out string strDomainName,
            out SID_NAME_USE accountType)
        {
            const int ERROR_INSUFFICIENT_BUFFER = 122;

            int lSidSize = 0;
            int lDomainNameSize = 0; …
Run Code Online (Sandbox Code Playgroud)

c# windows sid

6
推荐指数
1
解决办法
5367
查看次数

Strophe获得无效的SID

我正在使用strophe和jquery构建一个基于Web的客户端,我使用openfire作为服务器.几乎所有它的工作,我可以得到名单,发送和接收消息,但当我试图将我的存在从可用性改为xa或dnd或任何其他服务器停止回答,我开始得到404错误POST和无效的SID消息如下:"NetworkError:404 Invalid SID. - http://myurl.com/ ".

我一直在讨论其他主题,这似乎是我的可用证书的问题,但我没有任何明确的证据证明什么是错的.

提前感谢您的帮助.

sid openfire strophe

6
推荐指数
1
解决办法
1461
查看次数

ASP.NET - 获取DirectoryEntry/SID的主体/相对标识符(RID)

我在自定义MembershipProvider类中使用Active Directory来验证ASP.NET 2.0 Intranet应用程序中的用户,并将其sid与应用程序的配置文件相关联.

ActiveDirectoryMembershipProvider被使用时,ProviderUserKey该对象MembershipUser是如下

SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey;
string sidValue = sid.ToString();

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX-YY"  */
Run Code Online (Sandbox Code Playgroud)

据我了解,它YY是命名空间中的主体(也称为组/域).

使用自定义MembershipProvider时,我可以使用objectSidDirectoryEntry对象的属性获取sid

DirectoryEntry entry = new DirectoryEntry(path, username, password);
SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties["objectSid"].Value, 0);
string sidValue = sid.ToString();

/* sidValue = "S-1-5-21-XXXX-XXXX-XXXX"  */
Run Code Online (Sandbox Code Playgroud)

sidValue这种情况下是相同的,只是它不包含主体YY.

我的问题是双重的

  1. 是否需要本人才能唯一地识别个人?
  2. 是否可以从DirectoryEntry对象(或通过任何其他可用的类System.DirectoryServices)获取主体?

编辑:

做了一些进一步的阅读({1} {2})后,我现在知道如果用户从一个组/域移动到另一个组/域,sid可能会改变.鉴于此,将使用中GUID定义DirectoryEntry Properties["objectGUID"]的更好的选择来唯一识别用户?

c# asp.net asp.net-membership sid active-directory

5
推荐指数
1
解决办法
3402
查看次数

从登录 ID 获取用户 SID(Windows XP 及更高版本)

我有一个 Windows 服务,当用户在本地或通过终端服务器登录时,它需要访问 HKEY_USERS 下的注册表配置单元。我在 win32_logonsession 上使用 WMI 查询来接收用户登录时的事件,我从该查询中获得的属性之一是 LogonId。为了确定我需要访问哪个注册表配置单元,现在我需要用户的 SID,它用作 HKEY_USERS 下的注册表项名称。

在大多数情况下,我可以通过像这样(在 C# 中)执行 RelatedObjectQuery 来获得它:

RelatedObjectQuery relatedQuery = new RelatedObjectQuery( "associators of {Win32_LogonSession.LogonId='" + logonID + "'} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent" );
Run Code Online (Sandbox Code Playgroud)

其中“logonID”是会话查询中的登录会话 ID。运行相关对象查询通常会给我一个包含我需要的 SID 属性。

我对此有两个问题。首先,也是最重要的一点,RelatedObjectQuery 不会为使用缓存凭据登录、与域断开连接的域用户返回任何结果。其次,我对这个 RelatedObjectQuery 的性能不满意 --- 它可能需要几秒钟才能执行。

这是一个快速而肮脏的命令行程序,我把它放在一起来试验查询。这只是枚举本地机器上的用户,而不是设置接收事件:

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;

namespace EnumUsersTest
{
    class Program
    {
        static void Main( string[] args )
        {
            ManagementScope scope = new ManagementScope( "\\\\.\\root\\cimv2" );

            string queryString = "select * from win32_logonsession"; …
Run Code Online (Sandbox Code Playgroud)

.net c# windows wmi sid

5
推荐指数
1
解决办法
2万
查看次数

VB.NET - 如何使用Active Directory将SID转换为组名

使用VB.NET,如何使用Active Directory将sid转换为组名?

例如:我需要获得"group_test"而不是"S-1-5-32-544"

我正在使用的代码是:

Public ReadOnly Property Groups As IdentityReferenceCollection
    Get

        Dim irc As IdentityReferenceCollection
        Dim ir As IdentityReference
        irc = WindowsIdentity.GetCurrent().Groups
        Dim strGroupName As String

        For Each ir In irc
            Dim mktGroup As IdentityReference = ir.Translate(GetType(NTAccount))
            MsgBox(mktGroup.Value)
            Debug.WriteLine(mktGroup.Value)
            strGroupName = mktGroup.Value.ToString

        Next

        Return irc

    End Get
End Property
Run Code Online (Sandbox Code Playgroud)

或类似的东西?

        currentUser = WindowsIdentity.GetCurrent()

        For Each refGroup As IdentityReference In currentUser.Groups

            Dim acc As NTAccount = TryCast(refGroup.Translate(GetType(NTAccount)), NTAccount)
            If AdminGroupName = acc.Value Then
                ret = "999"
            End If
            If UsersGroupName = …
Run Code Online (Sandbox Code Playgroud)

vb.net asp.net sid usergroups active-directory

5
推荐指数
2
解决办法
1万
查看次数

express-session - 会话 ID 和 connect.sid 之间的区别?

session id和 和有什么区别connect.sid

例如:

console.log('session id =', req.sessionID)
Run Code Online (Sandbox Code Playgroud)

结果:

session id = CCw2pSpdPf8NRKLQpFH-nlFztEzps24Q 
Run Code Online (Sandbox Code Playgroud)

和:

console.log('req.headers =', req.headers)
Run Code Online (Sandbox Code Playgroud)

结果:

req.headers = {                                                                                                                                         20:51:34
  host: 'localhost:3000',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 ' +
    '(KHTML, like Gecko) Chrome/73.0.3683.75 ' +
    'Safari/537.36',
  dnt: '1',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8',
  cookie: 'connect.sid=s%3ACCw2pSpdPf8NRKLQpFH-nlFztEzps24Q.P04Tx%2FNboFGXvR34HOjpbeh4ogWy58zs%2Bpyde%2FkuUVs',
  'if-none-match': 'W/"2f-u+/xADzzu5HL7bySP/YXVKZBlPc"'
}
Run Code Online (Sandbox Code Playgroud)

CCw2pSpdPf8NRKLQpFH-nlFztEzps24Q 不同于 connect.sid

如何在中间件中使用它们来验证用户?

sid sessionid node.js express

5
推荐指数
1
解决办法
3841
查看次数

你在c#中获得Windows安装SID?

我知道这个问题多次被问过,但没有人回答我的问题.我从Comptiat A +的研究中得知,在使用自动(无人值守)安装时,技术人员必须返回并更改MACHINE SID,然后才能在每台机器上激活操作系统.似乎有很多关于如何通过网络获得SID的问题,但我知道还有一台机器SID无法更改.对于那些使用过Fix-It Utilities启动盘的人来说,有一个按钮"更改SID",如果已经激活,Windows将无法启动.

我的问题与类似,但他的问题从未真正回答过.我的问题是,如何使用c#获取MACHINE Windows安装SID.

c# windows sid

4
推荐指数
1
解决办法
3459
查看次数

Win32 API:为当前用户创建公共文件,但为其他人创建私有文件

我正在使用Win32 API在C中测试以下代码,该API旨在创建一个新文件,该文件可供当前用户访问,但对其他人来说是私有的(不可访问).

为此,这拒绝所有人SID的权限,然后为当前的用户SID设置权限.

该文件已成功创建,并且权限显然已成功设置(请参阅下面的屏幕截图),但是当我尝试使用记事本打开文件时,它会显示"访问被拒绝"(我的文件浏览器在同一会话下运行),如果我打开命令提示符并执行"输入file_created.txt",则会出现相同的"访问被拒绝".

我当然可以手动恢复权限,因为我是管理员,但我们的想法是让它以编程方式工作.

图像与每个人的权限: 在此输入图像描述

具有当前用户权限的图像: 在此输入图像描述

代码:

#include <windows.h>
#include <AccCtrl.h>
#include <aclapi.h>

#include <stdio.h>
#include <stdexcept>
#include <string>

#undef UNICODE

int GetCurrentUserSid(PSID* pSID)
{
  const int MAX_NAME = 256;
  DWORD i, dwSize = 0;
  HANDLE hToken;
  PTOKEN_USER user;
  TOKEN_INFORMATION_CLASS TokenClass = TokenUser;

  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ | TOKEN_QUERY, &hToken))
    return GetLastError();
  else
    wprintf(L"OpenProcessToken() - got the handle to the access token!\n");

  if (!GetTokenInformation(hToken, TokenClass, NULL, 0, &dwSize))
  {
    DWORD dwResult = GetLastError();
    if (dwResult != ERROR_INSUFFICIENT_BUFFER)
    {
      wprintf(L"GetTokenInformation() failed, …
Run Code Online (Sandbox Code Playgroud)

c++ winapi sid dacl visual-c++

4
推荐指数
1
解决办法
365
查看次数