【问题标题】:.NET : Transmit user credentials over the transport layer.NET:通过传输层传输用户凭据
【发布时间】:2011-04-17 13:36:16
【问题描述】:

通过传输层传输用户凭据 (Active Directory) 的最佳/最简单方法是什么。

我有两个系统 A 和 B 与第 3 方消息层 C 相连。

是否有任何方法(在 .NET 中更可取)以某种方式存储/序列化 A 侧经过身份验证的用户的凭据,通过 C 传输,然后在 B 侧反序列化,然后进行调用使用反序列化的凭据发送到下游系统 D?

【问题讨论】:

  • 如果您使用 IIS 来托管服务(来自同一域上的计算机),您只需将其配置为使用模拟(安全)。不确定这是否有帮助。

标签: c# active-directory impersonation integrated-security


【解决方案1】:

这称为模拟,但没有任何底层系统的详细信息,我无法确定是否支持。

如果系统是基于WCF的,这绝对是可能的。此MSDN 页面包含所有详细信息。

【讨论】:

  • 问题是tranposr层不是WCF。只是第三方消息传递层,我想知道是否可以在 Windows 中将某种身份验证令牌保存为 A 侧的字节数组,将这些字节传输到 B,然后反序列化这些以模拟 .NET 客户端(系统 B) 使用系统 A 用户的凭据 ...
【解决方案2】:

要将凭据“骡”到可由 AD 的身份验证前端之一进行身份验证的另一个系统,您需要一个模拟友好协议(例如 Kerberos)、原始凭据本身(有时称为“基本”或“用户名/密码”,但在某些情况下也可以是 RSA 密钥对之类的东西)和可选的用于包装这些凭据的框架(例如 WS-Sec、SAML)。

Windows 的 LSA 生成的 access token 仅在生成令牌的系统上有效 - 如果您将令牌从一个系统序列化和反序列化到另一个系统,LSA 不会接受它作为该进程的证明已通过该目标系统的身份验证,并且有权访问系统上的任何安全资源。否则,您将谈论一个受到重放攻击的系统(从一个盒子中获取安全上下文并重放它 - 无论是恶意还是其他,安全威胁模型都不会关心 - 在另一个盒子上)。

因此,“最简单”的方法是让您的代码提示用户输入他们的用户名和密码。这也是最容易受到安全漏洞影响的场景,如果他们的应用程序做了如此粗暴的事情,任何思想正确的组织都会窒息,但它是一种理论上的选择。

最好找到一种方法让系统间通信包含对身份验证协议的嵌入式支持 - 请参阅 GSS-API 了解在这些情况下通常可用的跨平台 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2010-11-23
    • 2015-02-06
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2015-08-12
    相关资源
    最近更新 更多