Asp.net mvc 3使用登录表单进行Windows身份验证

时间:2011-11-27 14:57:49

标签: c# asp.net asp.net-mvc-3 windows-authentication

我已经创建了一个表单身份验证应用程序我有User表并创建了自定义成员资格提供程序。我的用户表与其他表有关系,例如角色和权限。

  1. 我将其更改为使用Windows身份验证。它看起来很简单,但我不知道如何仍然能够从我的表中读取权限?有些表与User表有关,需要用户ID,在这做什么?我应该打破外键吗?

  2. 如果用户从局域网访问该页面,他/她应该自动登录,但如果他们通过互联网访问该应用程序,我应该允许他们登录?这该怎么做?他们应该使用哪些密码登录(活动目录或我的用户表)?

  3. 我希望我能得到简单易行的答案。

    此致

2 个答案:

答案 0 :(得分:0)

如果您使用Windows身份验证,系统会提示用户输入凭据以访问您的网站。你将无法阻止这种情况。在经过身份验证之前,他们甚至不会访问您的代码。

我们使用SSO(单点登录)完成了类似的事情,尽管我从未将其与Windows身份验证联系起来。这个想法是你有两个共享用户凭据的应用程序,如果你登录到一个,你就登录到另一个。第一个应用程序将是您支持基于表单的身份验证的普通应用程序。第二个是仅进行Windows身份验证的应用程序,然后在成功登录后重定向到您的正常应用程序。由于您已经过身份验证,因此普通应用程序只需创建标准身份验证cookie并将您带到应用程序的主页面。

通常,这些工作通过在URL中传递令牌,然后您可以通过反向通道将其兑换到SSO服务器(或者在您的情况下是Windows身份验证服务器)以确认令牌是可信的。如果成功兑换了令牌,则对后台频道呼叫的响应包含用户名和其他相关详细信息。

该过程的草图可能如下所示:

  1. 在网站上获取受保护行动的请求。
  2. 如果未经过身份验证,则无需令牌即可重定向到登录站点
    • 您的登录网站包含基于表单的登录表单和指向Windows身份验证URL的链接
  3. 用户点击Windows身份验证网址
  4. Windows身份验证站点进行身份验证,在DB中为用户创建一次性使用令牌,并使用令牌重定向回您的登录操作
  5. 您的登录操作通过反向通道WebRequest将令牌兑换为Windows身份验证服务器。
  6. Windows身份验证服务器验证令牌,将其标记为已使用,然后将用户名返回到您的登录操作。
  7. 您的登录操作会创建标准表单身份验证Cookie并继续正常运行。

答案 1 :(得分:0)

  1. 在您的控制器中,您可以使用User.Identity.Name来获取用户的AD用户名。然后,您可以向users表中添加一个名为ADUSername的字段(或更新现有用户名字段中的值),以便您可以将登录用户链接到数据库中的现有用户记录。

  2. 您无需执行任何操作,如果用户从外部网络或任何不在域中的计算机访问它,则浏览器将弹出用户名/密码提示。

    < / LI>
相关问题