我有一个Intranet应用程序,也可以通过客户端从Internet访问。我需要做的是为用户提供从互联网访问登录表单以输入凭据并根据AD验证它们。从Intranet访问此应用程序的用户应自动登录。
据我所知,我无法在ASP.NET项目中混合使用两种身份验证类型。所以我需要使用FormsAuthentication和ActiveDirectoryMembershipProvider来验证用户。但是个人资料怎么样?我需要根据用户的组选择配置文件(例如,如果它是来自经理表的经理负载配置文件,如果它是客户 - 来自客户表)。
第二个问题是我需要使用经过身份验证的人员凭据来访问WCF服务。并根据他们的小组成员资格确定他们能做什么/不能做什么。
使用FormsAuthentication正确的方法来执行此操作还是需要查看其他位置?
我使用EF代码优先方法来创建数据库。服务作为WCF服务实现。该应用程序本身是一个ASP.NET MVC站点。但在遥远的未来,我将需要WP7客户端。
答案 0 :(得分:1)
我们有一组类似的要求,我们接触它的方式是自己实现身份验证和配置文件管理,并且一旦用户通过身份验证,就使用FormsAuthentication进行站点安全。
对于提供用户名和密码的情况(登录表单,wcf客户端),您可以调用LogonUser方法。用户通过身份验证后,您可以在FormsAuthentication中使用其经过身份验证的用户名。
用户应自动登录的方案稍微复杂一些,因为您必须在主站点上提供匿名身份验证才能支持手动登录。
我们解决这个问题的方法是添加一个单独的Web应用程序作为主应用程序的子目录,并将此子应用程序配置为仅支持Windows身份验证。当内部用户点击此门户时,我们从Request.ServerVariables(" logon_user")获取他们的AD登录,使用有效5秒的令牌加密它,然后Response.Redirect用户到主要在查询字符串中使用加密网络登录的应用程序。
如果主应用程序在查询字符串中看到此参数,它会对其进行解密,验证它是否在允许的时间范围内,然后使用此凭据使用FormsAuthentication记录用户(这可能听起来很多,但实际上是描述占用的空间比代码多。)
希望这会给你一些想法。