通过传输层传输用户凭据(Active Directory)的最佳/最简单方法是什么。
我有两个系统 A 和 B 与第 3 方消息层 C 相连。
有什么方法(在.NET中更可取)以某种方式存储/序列化A端经过身份验证的用户的凭据,通过C传输,然后在B端反序列化,然后调用下游系统 D 使用反序列化的凭据?
通过传输层传输用户凭据(Active Directory)的最佳/最简单方法是什么。
我有两个系统 A 和 B 与第 3 方消息层 C 相连。
有什么方法(在.NET中更可取)以某种方式存储/序列化A端经过身份验证的用户的凭据,通过C传输,然后在B端反序列化,然后调用下游系统 D 使用反序列化的凭据?
要将凭据“骡”到可以通过 AD 的身份验证前端之一进行身份验证的另一个系统,您需要一个模拟友好协议(例如 Kerberos)、原始凭据本身(有时称为“基本”或“用户名/password”,但在某些情况下也可以是类似 RSA 密钥对的东西)和可选的用于包装这些凭据的框架(例如 WS-Sec、SAML)。
Windows 的 LSA 生成的访问令牌仅在生成令牌的系统上有效 - 如果您将令牌从一个系统序列化和反序列化到另一个系统,LSA 不会接受它作为进程已通过身份验证的证据该目标系统并有权访问系统上的任何安全资源。否则,您将谈论一个受到重放攻击的系统(从一个盒子中获取安全上下文并重放它 - 无论是恶意还是其他,安全威胁模型都不会关心 - 在另一个盒子上)。
因此,“最简单”的方法是让您的代码提示用户输入他们的用户名和密码。这也是最容易受到安全漏洞影响的场景,如果他们的应用程序做了这么粗暴的事情,任何思想正确的组织都会窒息,但这是一个理论上的选择。
更好的办法是为系统间通信找到一种方法,以包括对身份验证协议的嵌入式支持 - 请参阅 GSS-API 了解在这些上下文中通常可用的一个跨平台 API。
这被称为模拟,但没有关于底层系统的任何细节,我无法确定是否会支持它。
如果系统是基于WCF的,这绝对是可以的。此MSDN页面包含所有详细信息。