我可以在Active Directory中使用基于令牌的身份验证吗?

时间:2009-09-30 14:53:36

标签: c# .net active-directory impersonation

我希望能够安全地登录系统,而无需从活动目录中的Windows PC输入用户名密码。我的想法是,我(客户端软件,在登录的Windows机器上运行)有某种令牌,将向服务器证明我是谁,我说的是(服务器与AD通话以验证令牌和我的身份身份)。这可能是.net 3吗?

c#中使用的语言。

4 个答案:

答案 0 :(得分:10)

我认为您应该真正关注基于声明的身份验证。

微软最近做了很多。您可能听说过Geneva Server(现在官方称为ADFS 2.0)和Geneva Framework(现在正式称为Windows Identity Foundation)。这个想法是认证在中心点/服务器(一般是日内瓦服务器或安全令牌服务器(STS))完成,经过身份验证的用户被给予他/她提供给资源的安全令牌(基于SAML 2.0)他/她想要访问。身份验证可以通过各种方式完成,包括用户名/密码,智能卡,证书,或者 - 在您的情况下 - 通过翻译已存在的令牌,如Windows身份验证(称为Windows集成身份验证)。

令牌基于SAML 2.0(行业标准,这对于与其他供应商的STS产品的良好互操作性非常重要)。它包含有关在应用程序或资源(也包括Web服务)中用于执行授权(授予权限)的人的声明。为此目的,应用程序信任STS提供的权利要求当然是必要的。另一方面,应用程序根本不需要进行任何身份验证。

Geneva Framework是一个用于处理应用程序中的令牌的库(.NET)。它使用起来相当简单。

有关详细信息,请查看白皮书,其中对此主题进行了详细介绍。官方网站是here.

当然,还有很多问题需要通过这些概念来解决,这些问题确实是恕我直言的有趣部分。这包括单点登录(SSO),联合单点登录(跨多个组织边界),委派(应用程序使用具有您用户权限的Web服务)。希望这个信息有帮助!

干杯

PS:当然,这根本不是微软的问题。还有其他STS产品,如Sun OpenSSO,Ping Identity和Thinktecture Identity Server,它们提供类似的功能。我刚刚强调了微软的东西,因为它与AD的良好互操作性以及问题中提到的Windows身份验证。

答案 1 :(得分:3)

如果我已正确理解了这个问题,那么看起来Kerberos可能正是您在此实例中寻找的内容。 Kerberos身份验证(如果您的目标环境支持)将允许这种出票方式的身份验证。有关如何使用Kerberos进行 Brokered authentication 的广泛概述,我建议Brokered Authentication with Kerberos上的MSDN参考:

Brokered authentication with Kerberos http://i.msdn.microsoft.com/Aa480562.ch1_brokauthkerb_f02(en-us,MSDN.10).gif

至于支持此功能的C#代码,我建议这个CodeProject article专注于MS Web服务,但可能提供在其他方案中使用它的基础。

答案 2 :(得分:0)

如果您访问任何网络资源(文件共享,SQL Server等),应用程序将自动以当前正在运行它的用户身份执行它们。你想做更具体的事吗?如果您在域中运行,则权限应自然地跟随您使用您使用的任何网络资源。

您可以使用.NET来模拟其他用户并执行任务,但无需执行任何其他步骤,您将代表用户执行操作,而无需再次登录。

答案 3 :(得分:0)

在Windows机器上,每个应用程序线程都在某个安全令牌下运行,默认情况下这是当前用户的令牌,所以如果你想读取机器或网络上的文件,你的应用程序将带着你的令牌去那里,你可以运行作为其他一些用户或服务的应用程序,或者您可以冒充您的代码作为其他人。如果您使用它作为asp.net应用程序,Internet Explorer将在后台与iis(在您的Intranet区域)交换数据,以便服务器知道您是谁,但默认情况下不会在您的凭据下运行,这可能是通过web.config更改