我正在创建一个Asp.net MVC应用程序,我目前正在使用示例MVC应用程序附带的内置身份验证/授权代码.在大多数情况下,这工作正常,我有点理解发生了什么.
但是我关心的是,现在我的用户存储在两个不同的数据库中.即我的应用程序数据库中的用户代表应用程序中的"客户"实体,以及用于登录应用程序的人员的身份验证数据库中的"用户".
我应该使用登录用户的User.Identity.Name值并在我的Customers表中查找,还是应该将它们合并到一个表中?处理此问题的最佳做法是什么?
请原谅我的无知 - 这是我第一次使用这样的系统.
非常感谢任何反馈!
我已经使用UrlRewriting.Net模块几年了,在Windows XP和Windows 2003中没有任何问题.我最近刚将家用PC升级到Windows 7并开始开发新网站.
计划是使用.html扩展,并使用UrlRewriting.Net模块将它们重写为.aspx对应物.在VWD 2008中,一切都完美无瑕,但是当我尝试通过IIS7运行时,这是一个不同的故事.
当我尝试通过.html重写访问页面时,我无法再访问Page.User; 它一直返回null.如果我使用它的.aspx扩展名点击页面,则会正确填充Page.User.我还应该提一下,我的母版页中有一个LoginView控制器,它有相同的症状:当通过.html扩展访问时,它会显示AnonyousTemplate; 使用.aspx扩展名时,它会正确显示LoggedInTemplate.我猜这两个是相关的.
[注意:我也尝试过无扩展名的网址,他们也遇到了同样的问题]
我让它工作的唯一方法是将应用程序池切换到Classic,然后要求我为.html扩展名添加ASP.Net ddl处理程序[否则它由StaticFileHandler处理并作为404出现错误].但是,我希望我的网络应用程序能够为人们正常运行,而无需使用IIS.
所以我有几个问题:
[注意:我刚尝试了.aspx => .aspx重写,但没有出现问题.不是我想要的,但我想我应该提到它.
在本文中,我承担了实施第4点的任务:http : //support.microsoft.com/kb/900111
这涉及使用成员资格提供程序在用户登录和注销时向用户服务器端记录添加评论,然后确认当使用cookie进行身份验证时,用户尚未注销。这对我来说很有意义。这种情况开始瓦解的是我们当前不使用成员资格提供程序,因此似乎我要重新实现所有身份验证代码以使用成员资格提供程序。当前,我们在控制器中检查身份验证,并在FormsAuthentication.SetAuthCookie()知道用户存在后进行调用。强迫成员资格提供者从事很多工作。
所有这些工作真的必要吗?我是否可以将自己的Cookie值的键值存储区滚动给登录的用户,并确保在用户单击注销按钮时清除此设置。如果这似乎不安全,是否有一种方法可以实现最小成员资格提供程序,以便在不将所有身份验证代码交给它的情况下进行这些检查?
我想这里的主要问题是,我们很久以前就决定成员资格提供者模型不适合用于锁定和解锁帐户的模型,因此选择不使用它。现在,我们发现MS建议特别提到了成员资格提供程序,并且由于这是安全性,因此我需要确保不按建议使用它不会造成麻烦。
我的ASP.NET MVC项目中的默认控制器使用[Authorize]属性进行修饰.当我在我的开发机器上部署网站并访问网站时,我被重定向到登录页面(在Web.Config的窗体loginUrl部分中定义).结果:一切都按预期工作.
当我在我们的生产服务器(Windows Server 2008,IIS 7,DefaultAppPool)上发布网站并访问网站时,预期地址显示在地址栏(/Account/LogOn?ReturnUrl=*my_expected_return_url*)中,但页面显示"您无权查看此目录或页." 而不是登录页面.如果我删除默认控制器/操作上的[Authorize]属性,页面将正确显示.
我的Web.Config文件:
sessionState mode="InProc" timeout="30"
authentication mode="Forms"
forms loginUrl="~/Account/LogOn" timeout="2880"
Run Code Online (Sandbox Code Playgroud) 我正在开发一个MVC2应用程序并在其上使用表单身份验证.
脚本,图像和样式都被阻止给未记录的用户,因此登录页面看起来很糟糕.
它在本地运行良好,问题是当我发布到服务器时.
有谁有任何想法为什么????
PS:服务器IIS是7.5版
我的Web.config:
<configuration>
<system.web>
<globalization culture="pt-BR" uiCulture="pt-BR" />
<httpRuntime requestValidationMode="2.0"/>
<customErrors mode="Off" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<pages>
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Admin.Models" />
</namespaces>
</pages>
<authentication mode="Forms">
<forms name="AGAuth" loginUrl="~/Home/Login" timeout="120" />
</authentication>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc forms-authentication iis-7.5 asp.net-mvc-2
我想IIdentity.AuthenticationType在自定义FormsAuthentication场景中利用该属性来设置我自己的值.使用出的现成的FormsAuthentication,在AuthenticationType该中IIdentity与相关的HttpContext设置为"表格".
任何人都可以验证核心Asp.Net或Asp.Net MVC框架中是否有任何逻辑,其功能依赖于HttpContext.Current.User.Identity.AuthenticationType == "Forms"?
我已经为SSRS 2008r2编写并部署了一个自定义安全扩展,除了尝试从BIDS 2008/Visual Studio中部署报告之外,它还可以很好地工作.
安全扩展的体系结构通过多个权限处理登录,我通过在LogonUser()中创建用户会话来管理它,将其保存在数据库中,然后使用传递的UID在RS Web服务的客户端代理类中加载会话来自服务的cookie,然后重写身份验证票证以包含会话UID以及当前用户的用户角色.然后,可以在自定义授权扩展中使用这些值来管理SSRS操作和对象的用户权限.
我遇到的问题是,从BIDS部署报告时它不起作用.它直接访问服务,因此不需要服务代理类.我已经尝试在HTTP上下文中处理后验证事件,但是由于RS服务没有持久存在会话cookie,因此我无法访问会话值.
那我错过了什么?是否有另一种控制用户角色和权限的方法,不需要在任何地方硬编码用户名?就像我说的那样,可以使用多个权限进行登录,因此无法通过用户名来管理权限(并且想到它会让我感到畏缩).
我想到的一个可能的解决方案是为BIDS编写扩展或插件,它本质上充当了Web服务的代理,这将允许我更好地控制登录过程,但我不知道这是否可行(谷歌没有帮助. ..)
任何帮助都将被感激地接受!
我确信在某个地方必须有一个骗局,但我找不到它:
鉴于一个asp.net应用程序本身使用表单身份验证,保护面向公众的演示站点的最佳做法是什么,这样任何不在"人群中"的人都可以看到该站点?
我正在编写一个带有自定义身份验证和授权的MVC 4 Web应用程序.当用户登录该站点时,我创建了一个FormsAuthenticationTicket并将其存储在cookie中
public void SignIn(string userName, bool createPersistentCookie, string UserData)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");
// Create and tuck away the cookie
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, userName, DateTime.Now, DateTime.Now.AddDays(15), createPersistentCookie, UserData);
// Encrypt the ticket.
string encTicket = FormsAuthentication.Encrypt(authTicket);
//// Create the cookie.
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
HttpContext.Current.Response.Cookies.Add(faCookie);
}
Run Code Online (Sandbox Code Playgroud)
该的UserData字符串将是一个管道分隔字符串,它总是包含至少两个项目,用户名| UserRole.可以将用户分配给一个或多个角色,因此,UserData可能看起来像此UserID | UserRole | UserRole | UserRole的
然后我在Global.asax中拥有自己的自定义 …
目前我有两种方式:
当我设置我的web.config cookieless="UseCookies"我的网址看起来:
<sessionState timeout="60" cookieless="UseCookies"/>
当我设置cookieless="true"我有这样的网址
http://example.com/%28S%28uanyuxwgaviyonky0lxwq3vq%29%29/Stuff
<sessionState timeout="60" cookieless="true"/>
我可以设置cookieless属性动态吗?就像是
if(/*condition*/)
{
sessionState .cookieless = "true";
}
else
{
sessionState .cookieless = "UseCookies";
}
Run Code Online (Sandbox Code Playgroud)
这必须是SessionStartGlobal.asax中的某个地方