身份验证cookie似乎在短时间(一天左右)后超时.我正在使用表单身份验证,并在web.config中使用slidingExpiration ="false"的timeout ="10080".使用该设置,cookie应在用户成功通过身份验证后约7天到期.
这与IIS6一样广告,但当我将网站移动到IIS7时,cookie过期的速度要快得多.我已经在IE和Firefox的多台机器上确认了这种行为,这让我相信它是一个IIS7设置.
IIS7是否存在与身份验证相关的隐藏设置?除匿名用户跟踪外,网站禁用所有其他身份验证类型.
我在我的应用程序上使用ASP.NET MVC和Forms Authentication.基本上我 FormsAuthentication.SetAuthCookie用来登录和FormsAuthentication.SignOut注销.
在HttpContext.Current.User.Identity中我存储了用户名,但我需要有关已登录用户的更多信息.我不想将我的整个User obj存储在Session中,因为它可能很大并且信息比我需要的多得多.
您是否认为创建类似于LoggedUserInfo仅使用我需要的属性调用的类然后将其添加到Session中是一个好主意variable?这是一个好方法吗?
或者你有更好的想法?
我在控制器上有一个注销动作,如下所示:
public ActionResult Logoff()
{
var x = Request.IsAuthenticated;
var y = User.Identity.IsAuthenticated;
FormsAuthentication.SignOut();
Session.Abandon();
var a = Request.IsAuthenticated;
var b = User.Identity.IsAuthenticated;
return View();
}
Run Code Online (Sandbox Code Playgroud)
但是,x,y,a和b都是正确的.因此,当我的视图呈现时,它仍然表现得好像用户已登录.有人可以提供解决方案和/或解释吗?
使用FormsAuthentication构建到asp.net中,可以非常快速轻松地创建一个为经过身份验证的用户创建cookie的登录系统:
FormsAuthentication.SetAuthCookie(uniqueUsername, false);
Run Code Online (Sandbox Code Playgroud)
与Web.Config文件中的一些代码配对:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="30" defaultUrl="Dashboard.aspx" protection="All" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
这会将所有请求退回到Login.aspx,直到用户获得批准并使用SetAuthCookie()方法调用创建cookie.
这足够安全吗?
我使用的经验法则是我不会在客户端上存储他们没有发送给我的任何数据.所以我过去所做的就是保存cookie中使用的用户名和密码,然后对每个请求重新进行身份验证.
使用这种方法每次重新进行身份验证都会产生额外的开销,但这也意味着我没有在客户端上存储任何服务器数据.
我担心
我担心的是,通过使用SetAuthCookie()方法调用,用户名存储在客户端计算机上.那么有人可能会破坏正在使用的加密并替换为另一个存储的用户名吗?
我认为我过于偏执,使用的加密类型和级别已经足够,但我想我会就这个主题得到一些专家意见.
我有ASP.NET MVC 4应用程序.我使用Simple Membership Provider允许在登录表单下勾选记住我的复选框.如果勾选,则创建persitent cookie .ASPXAUTH,从登录日期起100天后到期.一切正常,除了应用程序的主菜单.
菜单的某些部分仅供管理员用户使用.我用:
@if (User.IsInRole("Administrator")) { @Html.Partial("_MainMenuPartial") }
Run Code Online (Sandbox Code Playgroud)
锁定它们不被普通用户渲染.登录系统后,此方法可以正常工作.当我在一段时间后返回并使用持久性cookie来验证我时,我确实登录了,但是
@User.IsInRole("Administrator")
Run Code Online (Sandbox Code Playgroud)
返回"False",因此我看不到管理员菜单项.同时
@User.Identity.Name
Run Code Online (Sandbox Code Playgroud)
返回正确的登录名和
@User.Identity.IsAuthenticated
Run Code Online (Sandbox Code Playgroud)
返回"True",证明持久性cookie工作正常.为什么我不能访问用户角色,即使用户通过系统进行身份验证呢?
在大多数情况下,我的webapp需要身份验证才能执行任何操作.有一些页面,即主页,我希望人们无需身份验证即可访问.
具体来说,我想允许匿名访问这些网址:
/home
/default.aspx
Run Code Online (Sandbox Code Playgroud)
我正在使用asp.net MVC和FormsAuthentication.两个网址都指向同一个视图:
/home/index.aspx
Run Code Online (Sandbox Code Playgroud)
这是我在web.config中的当前配置.
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud)
阅读授权标签的文档,它说"配置Web应用程序的授权,控制客户端对URL资源的访问".看起来我应该能够使用授权标签来指定URL并允许访问.
就像是:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<authorization url="/default.aspx">
<allow users="?" />
</authorization>
<authorization url="/home">
<allow users="?" />
</authorization>
Run Code Online (Sandbox Code Playgroud) 我正在使用MVC 3与表单身份验证.在我的控制器或方法上,我正在执行以下操作:
[Authorize (Roles = "developer")]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我想检查用户是否已登录,如果没有,请将其返回登录页面.但是,如果该用户的"IsInRole"检查返回false,我希望他们转到另一个类似"未授权"的视图.
完成这样的事情的最佳方法是什么?我希望避免创建一个新的Authorization属性,所以我不必重构整个应用程序中的每个Authorize属性,但如果这是必需的,我将走这条路.
创建我自己的IPrincipal,并IIdentity实现如下图所示:
[ComVisible(true)]
[Serializable]
public sealed class CustomIdentity : IIdentity {
private readonly string _name;
private readonly string _email;
// and other stuffs
public CustomIdentity(string name) {
_name = name.Trim();
if(string.IsNullOrWhiteSpace(name))
return;
_email = (connect to database and read email and other stuffs);
}
public string Name {
get { return _name; }
}
public string Email {
get { return _email; }
}
public string AuthenticationType {
get { return "CustomIdentity"; }
}
public bool IsAuthenticated …Run Code Online (Sandbox Code Playgroud) forms-authentication iprincipal iidentity custom-authentication asp.net-mvc-3
想象一下,你有一个只有2个页面的简单网站:login.aspx和secret.aspx.除了ASP.net表单身份验证和login.aspx上的ASP.net登录服务器控件之外,您的站点都是安全的.详情如下所示:
显然有很多事情需要考虑安全性,但我对.net框架附带的零代码开箱体验更感兴趣.
如果为了这个问题,唯一的攻击点是login.aspx中的用户名/密码文本框,黑客是否可以注入允许他们访问我们的secret.aspx页面的代码?
Microsoft提供的零代码开箱即用体验有多安全?
情况如下:
我正在尝试在网站之间共享cookie(表单身份验证).
我没有使用表单身份验证本身.我正在使用内置方法(加密,解密等),但我正在设置自己的自定义cookie.
当我在其中一个网站上设置cookie时,其他人会看到cookie,但无法解密.错误是通用"加密操作期间发生错误".
我所确保的:
我以前做过这个并且它工作正常,但在那种情况下,两个应用程序共享相同的代码库.
在这种情况下,它们是单独的应用程序.这是因为我正在构建一个解决方案,其中同一顶级域上的两个独立于平台的应用程序可以共享身份验证cookie.
任何人都可以告诉我我缺少什么,或提供替代解决方案.
我已经阅读了所有相关问题,但答案通常是2).
asp.net cookies asp.net-mvc forms-authentication cross-platform