使用Windows Identity Foundation将某人登录到ASP.net应用程序

时间:2009-12-24 14:54:21

标签: asp.net windows wif

我在办公室的主管告诉我,他看到了一个演示版,其中包含预发布版本的Microsoft“Geneva”(现在是Windows Identity Foundation),其中开发人员执行了以下操作:

  1. 他设置了某种ASP.net Web应用程序,用户可以使用自定义登录系统登录。在幕后,Web应用程序将用户作为Active Directory中的用户登录。

  2. 用户登录。

  3. 一旦用户登录,ASP.net Web应用程序线程将在用户会话期间以登录用户身份运行,并且可以访问网络上的资源(例如在表格上运行SQL查询访问受控Active Directory)

  4. 步骤2)和3)与使用IIS中网站设置的“目录安全性”选项卡中的“集成Windows身份验证”设置完全相同。步骤1)是不同的,因为我们使用自定义登录系统而不是Kerberos身份验证。

    我们希望将我们的一个应用程序设置为完全按照1),2)和3)中的描述进行操作。但是,我见过的关于Windows Identify Foundation的所有文档都是关于Cardspace和Federated Security的。我们现在对使用这些技术中的任何一种都没有兴趣。

    我们只希望能够在幕后将用户登录到Active Directory帐户。

    是的,我们已经ActiveDirectoryMembershipProviderForms Authentication一起尝试过了,但实际访问网络上的资源需要在每个页面上进行模拟,这是完全无耻的!

    2010年1月7日更新。好的,我已经在这方面工作了一段时间,而我设法提出的所有内容都达不到我想要实现的目标。也许我想要的功能不在WIF的发布版本中。

    这就是我现在所处的位置。我在MSDN上找到了一些文档,表明ASP.net中使用了三种不同的身份:HttpContext.Current.User指定的身份,Thread.CurrentPrincipal指定的身份,最后{{1}指定的身份1}}。 link

    在我想要使用我想要设计的过程的一个示例中,我想以登录用户身份执行SQL查询。在我的调试器中,我看到我轻松地将HttpContext和Thread用户设置为登录用户。但是,当我使用Windows身份验证连接到SQL服务器时,它始终始终作为WindowsIdentity.GetCurrent用户连接,并且该用户始终始终是ASP.net进程的标识,除非我使用带有模拟的Windows身份验证。我绝对不能在我的应用程序中使用Windows身份验证,因为我的用户必须通过播放魔笛歌曲登录,Windows身份验证不支持使用魔笛歌曲登录。

    为了澄清,获得代表登录用户的WindowsIdentity.GetCurrent(使用魔笛歌曲登录)没有任何问题。问题是我无法使用WindowsIdentity为我的用户执行SQL查询。

2 个答案:

答案 0 :(得分:5)

WIF允许您对其进行配置,使基于声明的身份映射到AD帐户,声明可以是联合身份声明,也可以通过信息卡发送。 c2WTS执行此功能。

即使它因为委托而映射你也总是必须委托如果你想使用AD身份IIS模仿 - 这就是它的工作原理,除非你为IIS设置Kerberos delegation

答案 1 :(得分:1)

您可以在ASP.net中使用Identity Impersonation实现相同的功能。您还需要为您的Web应用程序启用Windows集成身份验证。这将解决目的。如果登录用户没有访问资源所需的权限,您将获得必须处理的安全例外。