我希望能够安全地登录到系统,而无需在活动目录上的 windows pc 中输入用户名密码。这个想法是我(客户端软件,在登录的 Windows 机器上运行)有某种令牌,可以向服务器证明我就是我所说的我(服务器与 AD 对话以验证令牌和我的身份身份)。.net 3 可以吗?
c# 中使用的语言。
我希望能够安全地登录到系统,而无需在活动目录上的 windows pc 中输入用户名密码。这个想法是我(客户端软件,在登录的 Windows 机器上运行)有某种令牌,可以向服务器证明我就是我所说的我(服务器与 AD 对话以验证令牌和我的身份身份)。.net 3 可以吗?
c# 中使用的语言。
我认为您应该真正查看基于声明的身份验证。
微软最近做了很多。您可能听说过 Geneva Server(现在正式称为 ADFS 2.0)和 Geneva Framework(现在正式称为 Windows Identity Foundation)。这个想法是在中心点/服务器(通常是日内瓦服务器或安全令牌服务器(STS))上完成身份验证,经过身份验证的用户被赋予一个安全令牌(基于 SAML 2.0),他/她将其呈现给资源他/她想要访问。身份验证可以通过各种方式完成,包括用户名/密码、智能卡、证书,或者 - 在您的情况下 - 通过翻译已经存在的令牌,如 Windows 身份验证(称为 Windows 集成身份验证)。
该令牌基于 SAML 2.0(行业标准,这对于与其他供应商的 STS 产品的良好互操作性很重要)。它包含有关在应用程序或资源(也包括 Web 服务)中用于授权(授予权限)的人的声明。为此目的,应用程序信任 STS 给出的声明当然是必不可少的。另一方面,应用程序根本不需要进行任何身份验证。
日内瓦框架是一个库 (.NET),用于处理应用程序中的令牌。使用起来相当简单。
有关详细信息,请查看对这个主题进行了很好的介绍的白皮书。官方网站在这里。
当然,这些概念还有很多问题需要解决,恕我直言,这确实是有趣的部分。这包括单点登录 (SSO)、联合单点登录(跨越多个组织边界)、委派(应用程序使用您的用户权限的 Web 服务)。希望这些信息有帮助!
干杯
PS:当然这根本不是微软的问题。还有其他 STS 产品,如 Sun OpenSSO、Ping Identity 和 Thinktecture Identity Server,它们提供了类似的功能。我只是强调了微软的东西,因为它与问题中提到的 AD 和 Windows 身份验证具有良好的互操作性。
如果我正确理解了这个问题,那么看起来 Kerberos 可能正是您在这种情况下所要寻找的。Kerberos 身份验证(如果您的目标环境支持)将允许这种方式的票证身份验证。有关使用 Kerberos 进行代理身份验证如何工作的广泛概述,我会推荐 MSDN 参考关于使用 Kerberos 进行代理身份验证:
使用 Kerberos 进行代理身份验证 http://i.msdn.microsoft.com/Aa480562.ch1_brokauthkerb_f02(en-us,MSDN.10).gif
至于支持这一点的 C# 代码,我会推荐这篇CodeProject 文章,它专注于 MS Web 服务,但可能会为在其他场景中使用它提供基础。
在 Windows 机器上,每个应用程序线程都在某个安全令牌下运行,默认情况下这是当前用户的令牌,因此如果您想在机器或网络上读取文件,您的应用程序将使用您的令牌去那里,您可以运行应用程序作为一些其他用户或服务,或者您可以冒充您的代码以充当其他人。如果您将其用作 asp.net 应用程序,Internet Explorer 将在后台与 iis(在您的 Intranet 区域中)交换数据,以便服务器知道您是谁,但默认情况下不会在您的凭据下运行,这可以是通过 web.config 更改
如果您访问任何网络资源(文件共享、SQL Server 等),应用程序将自动以当前运行它的用户身份执行它们。你想做一些更具体的事情吗?如果您在域中操作,则权限自然会跟随您使用的任何网络资源。
您可以使用 .NET 模拟其他用户并以他们的身份执行任务,但无需采取任何其他步骤,您将代表用户采取行动,而无需让他们再次登录。