我的网站使用ASP.NET的表单身份验证,我将用户特定的信息插入到身份验证票证/ cookie的UserData部分.由于UserData位于身份验证票据内,因此它是加密的
authCookie.Value = FormsAuthentication.Encrypt(newTicket);
Run Code Online (Sandbox Code Playgroud)
现在我不太担心此时数据被泄露,因为它已加密.但我注意到这些数据是以未加密的形式提供的
FormsIdentity fid = User.Identity as FormsIdentity;
string plainTextUserData = fid.Ticket.UserData;
Run Code Online (Sandbox Code Playgroud)
数据本身并不太重要.即使别人能看到它,我仍然可以.但我不能让人们劫持这些信息,并开始将其作为自己的信息使用.例如,我不希望一个用户登录,假装是一个不同的用户(基于UserData中包含的用户ID)
这是我要担心的事吗?
我想这样做的原因是我可以停止使用会话,只使用cookie和Ticket.UserData
Ticket.UserData中的数据不会更改.一旦用户登录,它就是常量.
有什么方法可以用测试凭证模拟FormsAuthentication.Authenticate("用户名","密码")方法吗?我的测试目标是确保如果身份验证失败,它会重定向到正确的位置.我正在使用Rhino Mocks作为模拟框架.
非常感谢您的帮助,
我有一个使用Forms身份验证的ASP.NET网站
<authentication mode="Forms">
<forms name="NewsCoreAuthentication" loginUrl="~/Default.aspx" defaultUrl="~/Default.aspx" protection="Validation" timeout="300" domain="someRootDomain.com" />
</authentication>
Run Code Online (Sandbox Code Playgroud)
我需要确定用户在向客户端呈现后是否在网页上进行了身份验证.为了实现这一点,我想我可以阅读document.cookie并检查是否有".ASPXAUTH".但问题是即使我签了这个值也是空的.
如何检查该用户是否已通过身份验证?为什么document.cookie是空的?
谢谢你的回答.blowdart帮助我理解为什么无法从客户端脚本访问身份验证票据.
在asp.net中,我们在使用表单身份验证时指定重定向URL,如下所示:
<authentication mode="Forms">
<forms name="myApp" loginUrl="Login.aspx" protection="All" defaultUrl="default.aspx" path="/" requireSSL="false"/>
</authentication>
Run Code Online (Sandbox Code Playgroud)
这意味着当用户登录时,将 使用此方法重定向到"default.aspx"
FormsAuthentication.RedirectFromLoginPage(IDTextBox.Text, RememberCheckBox.Checked);
Run Code Online (Sandbox Code Playgroud)
现在是否可以让用户在登录前选择要重定向到哪个页面?
例如,用户从列表中选择要在登录之前登录的页面,然后将经过身份验证的页面重定向到此页面而不是default.aspx页面.
这是可能的,如果是这样,怎么办呢?
我正在尝试无缝地登录用户而不提示凭据作为<asp:Wizard>流程的一部分.我的策略是处理NextButtonClick事件并在代码中登录用户.我已经在会话变量中保存了用户的凭据.
是否可以在代码中登录用户?<asp:Login>是否需要在幕后隐藏控件?
asp.net forms-authentication asp.net-membership code-behind wizard
当用户登录到我的应用程序时,他提交一个要通过Servlet处理的表单.servlet为用户创建会话.如何创建链接以便用户可以注销?我似乎无法直接链接到Servlet.如何删除会话并链接回主页?
这是我可以做到的一种方式,但它似乎并不"正确".我可以链接回index.jsp?logout = true.我的index.jsp将查看logout是否为true并删除会话.
还有另一种方法吗?
我正在使用表单身份验证构建一个ASP.NET MVC3应用程序,我想在用户登录时注销用户的所有现有会话.我正在尝试阻止不同工作站的多个人登录并在相同的帐户.
有没有一种标准的处理方式?注销现有会话很简单,但我没有遇到过通过同一帐户检查其他会话并将其注销的方法.
关于如何破解这个问题,我有一些想法,但我很好奇是否已经建立了使用IIS或FormsAuthentication API的方法.
是否可以在超时发生时重定向到登录页面而无需等待用户先点击任何内容?现在,当超时发生时,页面用户仍处于显示状态,但只要用户点击任何内容,它就会进入登录页面.谢谢.
我在使用Authorize属性来处理角色时遇到了麻烦.这就是我装饰我的控制器的方式:
[Authorize(Roles = "admin")]
public ActionResult Index()
{
...
}
Run Code Online (Sandbox Code Playgroud)
这就是我记录用户的方式:
string roles = "admin";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
username,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
roles
);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket));
HttpContext.Current.Response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)
但我的用户仍被拒绝访问.我哪里错了?
我有一个ASP.NET MVC Web应用程序,需要允许公共API下载文件.这是动作代码:
public ActionResult DownloadFile(int id)
{
var item = _context.GetRepositoryFileByID(id);
if (item == null)
{
return HttpNotFound();
}
var filePath = Path.Combine(AppConfig.FilesRepositoryStorageRoot, item.IntrenalFilePath);
return File(filePath, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)
此方法是具有[Authorize(Roles = "Administrator,User")]设置属性的控制器, 因此仅登录用户可以访问此操作
现在,此操作应允许用户使用以下代码发出请求:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(fileDownloadUrl));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
我在这里缺少的是如何将授权传递HttpWebRequest给DownloadFile动作.
我尝试过的每件事都会返回登录页面,因为应用程序无法授权用户并允许他访问该DownloadFile操作.
我试图使用以下代码将此Cookie值传递给请求该文件的网站
var authCookie = FormsAuthentication.GetAuthCookie(User.Identity.Name, true);
var authCoockieValue = authCookie.Value;
Run Code Online (Sandbox Code Playgroud)
然后网站使用了这个值:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(fileDownloadUrl));
request.Headers[HttpRequestHeader.Authorization] = "Bearer " + authorization;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)
但是这没有用.我也尝试用"Basic"而不是"Bearer"标签传递标题,但它也是字段. …
c# asp.net-mvc forms-authentication httpwebrequest asp.net-mvc-4
asp.net ×6
asp.net-mvc ×3
c# ×2
code-behind ×1
cookies ×1
java ×1
javascript ×1
jsp ×1
rhino-mocks ×1
servlets ×1
timeout ×1
wizard ×1