使用 LOGON32_LOGON_NETWORK_CLEARTEXT 进行令牌委托

2023-12-19

使用安全性如何LOGON32_LOGON_NETWORK_CLEARTEXT http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184%28v=vs.85%29.aspx?

我们有以下场景:

Web 服务器 A 使用 Win32 LogonUser。然后它需要调用服务器B上的asmx方法。

如果使用的登录类型是 LOGON32_LOGON_INTERACTIVE,则效果很好。然而,客户拒绝了这一点,因为它需要交互式访问。

如果我们使用 LOGON32_LOGON_NETWORK,则不允许将令牌委托给远程服务器,我们会得到 401(正如预期的那样,根据 MSDN)。

尝试使用 DuplicateToken 将令牌“升级”为交互式失败。此尝试基于这篇文章,其中指出:

“当您请求交互式登录时,LogonUser 返回一个主 允许您在模拟时创建进程的令牌。什么时候 您请求网络登录,LogonUser 返回一个模拟令牌 可用于访问本地资源,但不能创建 流程。如果需要,您可以将模拟令牌转换为 通过调用 Win32 DuplicateToken 函数的主令牌."

但似乎如果我们使用 LOGON32_LOGON_NETWORK_CLEARTEXT 如所述这个旧线程 http://www.derkeiler.com/Newsgroups/microsoft.public.dotnet.framework.aspnet.security/2002-09/1146.html,代表团工作。但它的使用安全性如何?根据 MSDN:

“此登录类型在身份验证中保留名称和密码 包,允许服务器连接到其他网络 服务器同时冒充客户端。服务器可以接受明文 来自客户端的凭据,调用 LogonUser,验证用户可以 通过网络访问系统,并仍然与其他人通信 服务器。”

以这种格式使用的凭据是否对嗅探器可见(我们使用 Windows 集成安全性,有时使用 SSL,但并非总是如此)。

请指教。


我有同样的问题,虽然我还没有找到明确的答案,但我已经做了一些调查和阅读,这是我的结论(欢迎更正):

理想/最安全的用例是如果您的代码看起来像这样的伪代码:

success = LogonUser(username, domain, password,
    LOGON32_LOGON_NETWORK_CLEARTEXT, provider, out token)
if (success) {
    StartImpersonation(token)
    remoteConnection = AuthenticateToRemoteServer()
    StopImpersonation()
    CloseHandle(token)

    // continue to use remoteConnection
}

当您关闭其句柄时,与 LogonUser 会话关联的明文凭据将被销毁(我还没有找到这方面的参考,但对我来说,它们不会这样做是没有意义的)。因此,在令牌的生命周期内,存在用户凭据的副本,并用于对远程服务器进行身份验证。但是您的应用程序已经在内存中以明文形式提供了凭证(在变量中)username, domain and password)所以这并不会真正带来额外的安全风险。

使用 Windows 身份验证的远程服务器的任何身份验证都将使用 NTML 或 Kerberos,并且这两种协议都不会在线发送凭据,因此这不是问题。我不能肯定地说如果远程服务器要求基本身份验证会发生什么,但我认为它更有可能失败,而不是发送您的凭据。

如果您需要将令牌保留更长时间,文档确实指出凭据以明文形式存储在(某处)。我转储了测试进程,但无法在转储文件中找到它们,所以我不知道这是否意味着它们存储在内核内存中或什么中。如果我必须长期保留这个令牌,我会有点担心。

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

使用 LOGON32_LOGON_NETWORK_CLEARTEXT 进行令牌委托 的相关文章

  • Azure 无效 AccessToken

    我正在尝试使用 Microsoft Azure Management Resources 库来管理一些 Azure 资源 我已在 Azure AD 中注册了应用程序 并授予了它所有权限 我获取了它的 ApplicationId 和 Secr
  • django-rest-auth 重置密码 uid 和令牌

    我们的团队在后端使用 django rest api 进行项目 并在前端进行响应 对于身份验证 我们使用 django rest auth 并且我们在密码重置方面遇到问题 这里的网址 urlpatterns url r accounts i
  • 在 htaccess 重写规则中附加秘密令牌作为查询字符串有多安全?

    我在尝试提供答案时做了一些测试mod rewrite 重定向但阻止直接访问 https stackoverflow com questions 45326795 mod rewrite redirect but prevent direct
  • Java 中的字符串分词器

    我有一个文本文件 其中包含用 分隔的数据 我需要获取每个字段 用 分隔 并处理它 文本文件如下所示 ABC DEF FGHT 我正在使用字符串标记生成器 JDK 1 4 来获取每个字段值 现在的问题是 我应该在 DEF 之后得到一个空字符串
  • 何时需要使用令牌保护表单(CSRF 攻击)?

    据我了解 Web 开发人员应该创建令牌并将其放入表单的隐藏字段中以防止 CSRF 攻击 此外 他应该在会话中保存相同的令牌 然后在提交表单时检查令牌是否相等 我开始质疑 是否有必要对所有形式都采用这种技术 我的意思是 想象一下为登录而创建的
  • 是否可以在elasticsearch中注册文档生命周期?

    我想创建一个函数 在elasticsearch中创建令牌文档 并为它们提供令牌生命周期 就像在redis中一样 并随着时间的推移自动删除它们 Elasticsearch 支持该功能吗 在 ES 2 0 很久以前 中 曾经有一个 ttl元数据
  • 任何类型的空格上的 JavaCC 词法错误

    我清楚地在我的 SKIP 令牌中定义了 unicode 空白字符 如下所示 SKIP r n t 但是 当我运行 Java CC 时 它会很好地解析所有标记 直到我遇到上述任何空白字符并抛出以下错误 Exception in thread
  • 从 Windows-7 登录屏幕创建事件

    我问这个问题是因为事实证明 在 Delphi 中编写能够从登录屏幕运行的屏幕保护程序应用程序存在一些困难 参见问题 Delphi 中的 Windows 7 登录屏幕保护程序 https stackoverflow com q 5567775
  • 在 flutter 应用程序中保存 jwt 令牌的最佳方法是什么?

    不仅仅是在哪里 例如 SQLite 还有如何 库 最佳具体实践 您可能不想在共享首选项中存储敏感数据 相反 您可能想研究这样的插件 https pub dartlang org packages flutter secure storage
  • Rails 简单形式给出 InvalidAuthenticityToken 错误

    我有一个像这样的简单表格
  • 如何按照 PKCS#11 将 Microsoft Crypto API 与 USB 适配器一起使用

    我有一家公司提供的 safenet 身份验证 USB 令牌 他们告诉我他们里面有数字公钥证书 他们给了我一个密码和一个软件 通过它我可以看到它可以检测里面的证书 现在我需要访问此令牌的证书 然后我需要使用我的开发代码进行签名 加密和解密 但
  • 获取相对于文件开头的标记起始字符位置

    antlr4 API 有没有可靠的方法来获取相对于文件开头而不是行开头的令牌起始字符位置 经过一些研究后 我发现唯一的方法是使用 IntStream 的一些自定义实现 它不会将 n 视为行终止符 但也许我缺少一些更简单的方法 如果重要的话我
  • Windows Batch 读取文件并将行解析为标记和变量

    通过搜索这个网站并学习 Windows 批处理脚本这一荒谬的语言 我已经取得了很大的进展 但我现在陷入了困境 我有一个行数可变的文本文件 每行看起来像 AA8315 United States N777AN American Airline
  • Rails in_place_edit:如何传递真实性令牌?

    我正在尝试进行适当的编辑工作 但遇到了此错误 ActionController InvalidAuthenticityToken ActionController InvalidAuthenticityToken 我知道 Rails 现在想
  • ANTLR4:隐式或显式标记定义

    在 ANTLR4 中使用显式标记定义有哪些优点和缺点 我发现单括号中的文本比创建单独的标记并使用它代替文本更具描述性且更易于使用 E g grammar SimpleTest top library module library libra
  • 如何编写 GraphQL 查询

    我有一个有效的网络 graphql 查询 me on Student profile fullName emailId mobileNumber civilId address city state country zipCode user
  • OAuth 2.0 令牌对于提供商来说永远是唯一的吗?

    当 OAuth 2 0 提供商颁发令牌时 该令牌值对于提供商而言是否永远是唯一的 或者是否有可能在未来的某个时候 大概在令牌过期后 可能会为不同的用户发行具有相同值的另一个令牌 在搜索中 我发现了很多有关令牌过期的信息 但没有关于该令牌值将
  • 如何生成24小时后过期的唯一令牌?

    我有一个 WCF Web 服务来检查用户是否有效 如果用户有效 我想生成一个 24 小时后过期的令牌 public bool authenticateUserManual string userName string password st
  • 将 WebApp 授权给 ADFS 以访问 Dynamics CRM Web API

    我有一个 Web 应用程序需要与 Dynamics CRM 365 Web API 通信 Dynamics CRM 配置为 ADFS 上的依赖方 服务器是 Windows Server 2016 一切都在本地 而不是在 Azure 上 我为
  • 为什么我们必须在 OAuth 中“更改令牌凭据的临时凭据”?

    服务器不能只是将临时凭证 升级 为令牌凭证并保留相同的密钥和秘密吗 然后 客户端可以在收到服务器的回调 表明临时凭证已 升级 后立即开始进行经过身份验证的调用 当然 如果临时凭证尚未升级 即客户端不等待回调 则经过身份验证的调用将失败 所以

随机推荐