使用Windows身份验证将用户登录到ASP.net应用程序而不使用Windows身份验证?

时间:2010-05-28 13:33:40

标签: asp.net active-directory kerberos

5 个答案:

答案 0 :(得分:1)

由于Rising Star表示转换为Windows身份验证不是一种选择,那么在代码中进行模拟呢?需要注意的是,您需要知道用户密码。事实上,我会说,如果您无法访问用户密码,则无法模拟用户。

我认为WindowsImpersonation类可以提供您所需的功能。有关如何使用特定ID和密码执行此操作的示例,请参阅MSDN

原始答案

您可以将应用程序从当前的身份验证方法切换到Windows身份验证吗?在这种情况下,如果您在未指定ID /密码的情况下启用模拟,您的应用程序将模拟我认为您正在寻找的登录用户。

有关设置此内容的详尽说明,请here

答案 1 :(得分:0)

您是否已检出向web.config添加模拟?这样,您的进程不会以匿名用户身份运行,而是作为经过身份验证的网络帐户运行:

<identity impersonate="true" userName="domain\username" password="goes@here"/>

这就是我公司处理事务的方式。相反,您可以将应用程序池设置为以网络用户身份运行。

您似乎正在尝试使用数据库来限制对功能的访问。我不确定这是最好的路径。通常,应用程序具有对数据库的完全访问权限,然后使用代码限制访问。

更新: 根据您的评论,似乎前一段是相关的。我从未听说过ASP.NET框架在每次登录的基础上处理模拟的架构。我见过用户通过底层网络结构进行身份验证的系统 - 也就是IIS / Windows执行的kerberos身份验证。

与以前一样,传统上您没有为每个最终用户授予数据库服务器上的唯一权限。应用程序登录到数据库,然后通过应用程序管理各个用户。

您是否有理由不使用kerberos并将工作负载推送到IIS?

答案 2 :(得分:0)

在某些时候,您将不得不向用户询问凭据 - 这可能是一次性请求(或者直到用户仍然更改其密码)。

听起来你正在尝试进行单点登录 - 虽然它通常会相反(允许您使用Windows帐户将非Windows帐户凭据传递给其他应用程序)但是没有理由你无法执行以下操作:

  1. 用户正常登录应用
  2. 如果用户没有存储Windows凭据
    1. 向用户询问凭据
  3. 尝试以用户身份登录
  4. 如果登录失败
    1. 再次询问用户凭据
  5. 商店凭据
  6. 将凭据存储在“SSO”缓存中后,您可以使用它们为网络请求创建新的NetworkCredential对象(即您的SQL连接,文件副本等)。

    您可以在此处阅读说明http://aspalliance.com/1545_understanding_single_signon_in_aspnet_20.all

答案 3 :(得分:0)

答案 4 :(得分:0)

您应该将站点配置为使用特定于站点的服务帐户,这将有权访问数据库。这与用于访问该站点的帐户无关。这两者是分开的,不需要假冒来满足要求。

这里的问题是您的假设,以及大多数(如果不是全部回复)假设访问SQL Server的AD帐户必须是代表身份验证用户的帐户。

启用模拟只会产生需要解决的问题。

我的开场陈述是大多数网站 - &gt;数据库访问是如何安全的,其他(不替换)机制包括IPSec,安全隧道等。首要的业务是分配“服务帐户”(和AD帐户)本网站使用它来保护通信,不仅仅是与MSSQL,而是所有网络资源。)