我想在经过身份验证的用户中存储额外的信息,以便我可以轻松访问它(例如User.Identity.Id),而不仅仅是名称,因为我计划让它具有非唯一性.
到目前为止,我已经收集到了我应该寻求实现自定义Principal和/或Identity,但我不确定如何去实现它.我一直在寻找有关此事的文档和教程,但我在不同的地方找到了相关的东西,我发现它有点令人困惑.
我已经看到了如何将自定义信息添加到用户数据属性中的身份验证cookie,但我希望获得单元测试的依赖注入的好处,我可以使用主体和身份.
如果我想实现自己的Principal或Identity,我需要考虑哪些确切的步骤?
在这种情况下我能做的最简单的事情是什么(只需添加ID并保留所有默认值)?"默认值"将包括默认提供者(成员资格,角色等).
我已经看到了另一个问题,但我很欣赏不会在两者之间留下任何漏洞的答案,例如示例中AuthenticateRequest事件中的角色魔术字符串.相反,我需要知道如何将默认SqlRoleProvider中的角色添加到当前用户:何时何地执行此操作,以及是否需要执行任何其他操作以将新类与其他默认提供程序连接.
能够转到示例ASP.NET MVC 2应用程序(例如,来自visual studio 2010模板),进行编辑并使其工作是非常棒的.
编辑:我已经编辑了这个问题,以便更好地表明我在这里已经失去了很多,所以我无法用太高的答案来做.
PS:在我看来,在身份而不是校长中使用ID会更有意义,尽管我在某种程度上已经说过这个.
我有一些AJAX调用通过jQuery.AJAX方法呈现PartialViewResults.这很好用,我的视图完全按照我想要的方式呈现.
当我离开页面一段时间并且Forms身份验证会话到期时,会出现问题.当我单击执行AJAX请求的操作时,它会在我的div中显示登录页面.
我希望它将WHOLE页面重定向到登录页面.
我在不同端口的localhost上运行了2个网站.由于浏览器在发送cookie时不区分端口号,因此来自一个站点的表单身份验证票据将被发送到另一个站点
我该如何解决这个问题?我认为一个好的解决方案是更改表单身份验证票证或其中一个网站,但我不知道如何执行此操作.
默认的ASP.NET Forms Authentication cookie将其名称设置为" .ASPXAUTH ".注意第一个字符是句号?这有什么特别的原因吗?例如,这是否会对目标域的域名或子域产生影响.
或者它纯粹是一个MS开发人员提出的随机事物(也许是为了帮助排序cookie,当他们正在调试或者其他东西时......因为句子会在其他字符串之前被列出)?
这是场景......
用户输入他的用户名.键入"不正确"的密码.用户名和密码值都通过传递给Elmah错误日志Exception.Context.Request.Form["Password"].它是只读值,无法修改.
并且没有...我不想解雇异常(失败).我们以编程方式添加了ErrorLog Filtering:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if (e.Exception is LogOnException)
{
((HttpContext) e.Context).Request.Form.Remove("Password");
// This is what we want to do, but we can't because it is read-only
}
}
Run Code Online (Sandbox Code Playgroud)
但无法修改Request.Form,以便从我们的错误日志中隐藏密码.
有没有人遇到过这种方法?
我基本上想要没有密码字段的所有错误数据.我们考虑手动记录它,但与简单地隐藏敏感数据相比,这似乎是很多工作.
干杯伙计们.提前致谢.
上个月,我们将asp.net网站服务器从Server 2008 R2迁移到Server 2012 R2并升级到asp.net 4.5.我们正在使用cookied表单身份验证来防止未经授权访问该网站.
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
我们在web.config中列出了白名单的某些资产和页面(例如:登录页面):
<location path="signin">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
在过去的几个月里,我们一直注意到IIS/Asp.net随机停止遵守白名单并假设所有内容都需要进行身份验证.对该服务器上的站点的所有请求都将重定向到登录页面,然后会引发500错误.不能检索列入白名单的资产.
事件查看器中有2个错误,我们可以在IIS混乱时看到这些错误.首先:
Exception type: NullReferenceException
Exception message: Object reference not set to an instance of an object.
at System.Web.PipelineModuleStepContainer.GetNextEvent(RequestNotification notification, Boolean isPostEvent, Int32 eventIndex)
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
Run Code Online (Sandbox Code Playgroud)
第二个不会一直出现:
Event code: 4005
Event message: Forms authentication failed for the request. Reason: The ticket supplied has …Run Code Online (Sandbox Code Playgroud) 在ASP.NET(2.0)应用程序中,我使用FormsAuthentication.
在Global.asax/Application_AuthenticateRequest方法中,我检查HttpContext.Current.User是否为null.
这是否足以知道表单身份验证cookie是否存在,故障单是否已过期,总体而言,表单身份验证机制是否已完成其工作以验证用户?
我需要这个,因为我在该应用程序中有某些页面,有时不需要访问身份验证(基于某些标准),我将它们放在web.config中的单独"location"指令中,以便将它们排除在外来自"catch all"表单身份验证.
即我正在尝试检查Application_AuthenticateRequest,如果在此"位置"访问的页面需要保护,如果是,则知道用户是否已经过身份验证,或者我需要重定向到登录.
编辑:正如答案所示,我很可能会选择IsAuthenticated.为了让我更好地掌握它,这里有2个奖金问题:)(请编辑其他答案添加这些,谢谢):
我可以假设,如果IsAuthenticated为true,那么HttpContext.Current.User肯定会包含经过身份验证的用户的用户名吗?
如果强制执行FormsAuthentication,我怎样才能在HttpContext.Current.User中找到"匿名用户",并且只有少数几个页面被"location"指令排除?
我想在我的网站上使用身份验证才能登录管理部分.我已经有了我的数据库模式,我不想使用SQL Server的ASP.NET成员资格表.我有三个表:Employees,Roles和EmployeesInRoles.
我真的希望保持尽可能简单,但我找不到解决方案.我只想在表格中使用表单身份验证,以便员工可以登录,注销,更改密码等.
如果有人可以指导我发表关于此的博客文章或教程,那就太棒了.
有没有人设法使用基于PhoneGap的移动应用程序的ASP.NET Forms身份验证(使用cookie)?
关于在PhoneGap中管理cookie并正确配置服务器,我遇到了以下问题:
但不幸的是,这些解决方案都不起作用.来自PhoneGap应用程序的请求并不表示经过身份验证的用户,即使我在Safari中运行相同的dashboard.html代码作为文件,请求也会显示为已通过身份验证.
这可能是一个非常简单的问题,但在几个小时后试图理解它在ASP.NET 4.0上是如何工作的,我仍然不知道.
我正在使用表单身份验证.我有一个登录页面,上面有登录控件.
这是用户登录时所需要的:
A-用户应该保持记录状态,直到对超时设置不做任何操作.如果他们重新加载页面,则超时必须重新开始倒计时.
B-如果他们点击"记住我"检查他们应该保持联系,直到他们退出,无论他们是关闭浏览器还是重新启动计算机.
我遇到的问题是他们登录时我的计算机上没有看到任何cookie:
另外我还有另一个问题:当他们点击"记住我"检查(案例B)时,我希望他们记录,直到他们点击退出按钮.这次我确实看到了一个cookie,但看起来它们只是为了暂停而保持连接...所以记住我与否的区别是什么......
我想完全分开身份验证和会话.我希望身份验证由cookie控制,如果接近不是很糟糕.
谢谢你的帮助.