是否有一种托管代码(不添加 COM 组件或包装调用 C++ 例程)的方式来向 C# 托管代码程序集添加集成安全性?
即我想编写一个客户端-服务器系统,其中服务器使用 Remoting 而不是 IIS,但我希望客户端自动将其凭据传递给服务器,就像浏览器在与启用了集成安全性的 IIS 服务器通信时所做的那样。 .
这可以做到吗?如果是这样,哪里有一些例子?
是否有一种托管代码(不添加 COM 组件或包装调用 C++ 例程)的方式来向 C# 托管代码程序集添加集成安全性?
即我想编写一个客户端-服务器系统,其中服务器使用 Remoting 而不是 IIS,但我希望客户端自动将其凭据传递给服务器,就像浏览器在与启用了集成安全性的 IIS 服务器通信时所做的那样。 .
这可以做到吗?如果是这样,哪里有一些例子?
否 - SSPI没有纯托管接口。但是,有一个 MSDN 示例为您包装 SSPI,然后使用包装器进行远程处理。
.NET 2 具有 NegotiateStream,TCP 远程处理使用它来提供 SSPI。
有 WCF 和所有 .net 库供您实现类似的东西。我用过这样的东西
http://www.theproblemsolver.nl/usingthemembershipproviderinwinforms.htm
对于服务器部分
这两个步骤很好地开始了自己实施的安全集成。
当您说“远程而不是 IIS”时,您究竟是什么意思?远程端点(服务器端)通常托管在 IIS 中,因为这可以免费为您提供很多东西,例如身份验证、通过负载平衡进行扩展 - 特别是对于单调用类型的对象 - 也就是说,您不想保持状态用于对端点的连续调用。
您可以在客户端应用程序中使用 http 堆栈托管远程端点,也可以在 xp/sp2 中以及直接使用 http.sys 驱动程序(顺便说一句,它会自动为您处理)。
无论如何,对于使用 NTLM 凭据的自动登录,我建议您在 IIS 中托管远程处理,并使用 System.Net.CredentialCache.DefaultCredentials 作为您的客户端应用程序的客户端凭据。这会将上下文凭据传递给服务器应用程序,假设当前安全区域(intranet/internet/trusted/etc)允许它。
-Oisin