【问题标题】:ASP.NET MVC and WCF authentication/authorization against Active Directory with profiles in SQL server针对 Active Directory 的 ASP.NET MVC 和 WCF 身份验证/授权,以及 SQL Server 中的配置文件
【发布时间】:2011-12-08 15:29:30
【问题描述】:

我有一个 Intranet 应用程序,客户端也可以从 Internet 访问它。我需要做的是为从 Internet 访问它的用户提供登录表单以输入凭据并针对 AD 验证它们。从内网访问此应用的用户应自动登录。

据我所知,我不能在 ASP.NET 项目中混合使用两种身份验证类型。所以我需要使用 FormsAuthentication 和 ActiveDirectoryMembershipProvider 来对用户进行身份验证。但是个人资料呢?我需要根据用户组选择配置文件(即,如果它是经理表中的经理加载配置文件,如果它是客户 - 来自客户表)。

第二个问题是我需要使用经过身份验证的人员凭据来访问 WCF 服务。并根据他们的群组成员资格确定他们能做什么/不能做什么。

是使用 FormsAuthentication 正确的方法来执行此操作还是我需要查看其他地方?

我使用 EF 代码优先的方法来创建数据库。服务作为 WCF 服务实现。该应用程序本身是一个 ASP.NET MVC 站点。但在遥远的未来,我将需要 WP7 客户端。

【问题讨论】:

    标签: c# .net asp.net-mvc authentication forms-authentication


    【解决方案1】:

    我们有一组类似的要求,我们处理它的方式是自己实现身份验证和配置文件管理,一旦用户通过身份验证,就使用 FormsAuthentication 来确保站点安全。

    对于提供用户名和密码的场景(登录表单、wcf客户端),可以调用LogonUser方法。用户通过身份验证后,您可以在 FormsAuthentication 中使用他们经过身份验证的用户名。

    用户应该自动登录的场景会稍微复杂一些,因为您必须在主站点上提供匿名身份验证才能支持手动登录。

    我们解决此问题的方法是添加一个单独的 Web 应用程序作为主应用程序的子目录,并将此子应用程序配置为仅支持 Windows 身份验证。当此门户被内部用户访问时,我们从 Request.ServerVariables("logon_user") 中获取他们的 AD 登录信息,使用有效 5 秒的令牌对其进行加密,然后使用 Response.Redirect 将用户重定向到具有加密网络的主应用程序在查询字符串中登录。

    如果主应用程序在查询字符串中看到此参数,它会对其进行解密,验证它是否在允许的时间跨度内,然后使用此凭据让用户使用 FormsAuthentication 登录(听起来可能很多,但实际上是描述比代码占用更多的空间)。

    希望这会给你一些想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 2015-11-19
      相关资源
      最近更新 更多