这是一个MVC2网站,我遇到了FormsAuthentication票证的问题.30分钟后用户超时无法重新登录.在测试期间,DateTime.Now.AddMinutes(30)值设定为5000,一切正常,但是现在改为30,这是再当问题开始
从cookie创建
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
1,
user.UserID,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
"user,user1",
FormsAuthentication.FormsCookiePath);
Run Code Online (Sandbox Code Playgroud)
Web.config文件
<authentication mode="Forms">
<forms loginUrl="~/Account.mvc/LogOn" timeout="2880" name=".ASPXFORMSAUTH" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
票证创建中的到期值是否必须> = web.config值?
c# cookies formsauthentication formsauthenticationticket asp.net-mvc-2
我有两个有限的背景:
前者是现有的成熟产品,然而,它缺乏架构(SmartUI)导致难以维护的代码库,现在更加明显可见的可扩展性和可扩展性.
我们通过引入一个新的后端应用程序来迭代地解决这个问题 - 可以通过OWIN/WebAPI服务进行公开.
目前,我们只希望在新应用程序中利用cookie身份验证.最初,我认为使用基于FormsAuthenticationTicket的现有cookie身份验证/验证将是轻而易举的.显然这不是真的.
在我们的WebForms应用程序中,我们使用MachineKey来指定我们的decryptionKey和validationKey以支持我们的Web场.在.NET4中,如果我没有弄错的话,默认算法是AES.我认为如果默认值不够,利用这些信息构建我们自己的TicketDataFormat会很简单.
第一件事:
理想情况下,我们不打算将我们的主应用程序更新到.NET 4.5来替换cookie加密.有谁知道将OWIN的CookieAuthentication与现有的FormsAuthenticationTicket集成的方法?
我们试图创建自定义:
IDataProtector,SecureDataFormat<AuthenticationTicket>,IDataSerializer<AuthenticationTicket>的实现.IDataSerializer将负责FormsAuthenticationTicket和AuthenticationTicket之间的转换.
不幸的是,我无法找到有关微软机票加密的准确信息.以下是IDataProtector的示例构思:
public byte[] Unprotect(byte[] protectedData)
{
using (var crypto = new AesCryptoServiceProvider())
{
byte[] result = null;
const Int32 blockSize = 16;
crypto.KeySize = 192;
crypto.Key = "<MachineKey>".ToBytesFromHexadecimal();
crypto.IV = protectedData.Take(blockSize).ToArray();
crypto.Padding = PaddingMode.None; // This prevents a padding exception thrown.
using (var decryptor = crypto.CreateDecryptor(crypto.Key, crypto.IV)) …Run Code Online (Sandbox Code Playgroud) asp.net forms-authentication formsauthenticationticket asp.net-web-api owin
当我偶然发现FormsAuthenticationTicket.Version属性时,我在应用程序中创建了我的身份验证机制.文档没有举例说明任何用例,我没有找到任何其他用途的参考.
有人用过吗?
谢谢
我正在使用基于本教程的表单身份验证为ASP.Net 4.0站点实现自定义标识类:
表单身份验证配置和高级主题
我想在AuthCookie中存储额外的用户信息(名字/姓氏,性别,地理区域,个人资料图片缩略图文件名等...).msdn.microsoft.com上有关于限制UserData属性大小的警告.
我无法找到UserData属性的确定字符限制.只有整个加密的 cookie应该在4096字节以下.
有人知道我应该在我的代码中假设一个最大字符限制吗?或者更好地了解如何存储这些经常需要的用户信息?
谢谢
c# asp.net forms-authentication asp.net-4.0 formsauthenticationticket
当用户基于默认的表单身份验证方法登录时,服务器会创建一个包含加密数据的cookie(使用Machine Key作为加密密钥).
这意味着如果有人找到/猜测/访问服务器的机器密钥,他将登录到Web应用程序.
我开发了一些在4台服务器上的应用程序.所以,我为machine.config中的所有服务器硬编码了相同的机器密钥,我无法使用自动生成模式.
asp.net forms-authentication machinekey machine.config formsauthenticationticket
问题1:setAuthCookie是否比FormsAuthentication.Encrypt(ticketVariable)更安全?
我的意思是,如果有人试图修改setAuthCookie创建的cookie,通过修改用户名,我想这会违反后续调用的身份验证?
问题2:对于那些使用iphone和平板电脑访问网站的人,我认为FormsAuthentication会失败吗?鉴于我不想使用cookieless选项,是否有另一种方法可以在智能手机网络浏览器和非智能手机网络浏览器上使网站安全?
干杯
我正在寻找一个解决方案,我们可以使用很长的有效期制作FormsAuthenticationTicket(和相应的cookie).这可以通过设置较高的值或使用滑动过期来实现,但是当网站的应用程序池被回收时,FormsAuthenticationTicket消失(我认为),cookie无效并要求用户再次登录.
有没有办法解决?
我正在尝试实现一个Web应用程序项目,我的网页可以使用AJAX检查服务器的身份验证票证到期日期/时间.
我正在使用带有slidingExpiration的表单身份验证.
我遇到的问题是我无法弄清楚如何检查值而不重置它.我创建了一个简单的页面 - CheckExpiration.aspx - 下面是代码背后的代码:
private class AjaxResponse
{
public bool success;
public string message;
public string expirationDateTime;
public string secondsRemaining;
public string issueDate;
}
protected void Page_Load(object sender, EventArgs e)
{
AjaxResponse ar = new AjaxResponse();
JavaScriptSerializer js = new JavaScriptSerializer();
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
string expiration = id.Ticket.Expiration.ToString();
TimeSpan timeRemaining = id.Ticket.Expiration - DateTime.Now;
ar.success = true;
ar.expirationDateTime = expiration;
ar.issueDate = id.Ticket.IssueDate.ToString();
ar.secondsRemaining = timeRemaining.Minutes.ToString() + ":" + timeRemaining.Seconds.ToString();
}
else
{ …Run Code Online (Sandbox Code Playgroud) 在我们公司,我们有一个使用Asp.net Web Forms 4.0构建的大型应用程序,它使用表单身份验证作为单点登录身份验证.配置如下:
<machineKey decryptionKey="..." validationKey="..." />
<authentication mode="Forms">
<forms cookieless="UseCookies" loginUrl="/url/to/login" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
上次我们正在开发一些使用Owin Cookie身份验证的项目.根据我的搜索,两种方法都不兼容.但是我发现这篇帖子是OWIN自我主机CookieAuthentication和Legacy .NET 4.0应用程序/ FormsAuthenticationTicket,我可以让他们两个一起工作,但我不能让整个代码工作得很好.实际上我不知道如何开发余数代码.
我会问你是否有人能解决这个问题或更简单的方法来解决这个问题?
我需要告诉你,我对Microsoft实现表单身份验证的细节知之甚少.
asp.net forms-authentication formsauthenticationticket asp.net-web-api owin