使用FormsAuthentication.HashPasswordForStoringInConfigFile()后如何恢复字符串的值
我有一个字符串s1 ="abc"然后
FormsAuthentication.HashPasswordForStoringInConfigFile(s1,"SHA1")= A9993E364706816ABA3E25717850C26C9CD0D89D
我怎样才能将"A9993E364706816ABA3E25717850C26C9CD0D89D"解密回"abc"?
我遇到了一个asp.net表单身份验证的奇怪问题.此问题仅发生在已成功登录的30多个用户中的3个用户.我使用的是非常基本的身份验证代码,我已多次使用并且从未见过这个问题.用户成功进行身份验证并创建auth cookie后,将调用cookie,并调用response.redirect到FormsAuthentication.GetRedirect(userid,false).命中Global.asax中的Application_AuthenticateRequest方法.
// Extract the forms authentication cookie
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];
if (null == authCookie)
{
// There is no authentication cookie.
return;
}
Run Code Online (Sandbox Code Playgroud)
因此,在保存"好"cookie之后立即发生重定向,cookie就为空.我已通过调试器运行代码,并且cookie在这3个用户上仅为null.但是cookie看起来与成功登录的许多用户的cookie相同.
有任何想法吗?这是应该正常工作的标准代码.
我想在我的网站上使用FormsAuthentication来保护我的静态文件,所以我按照这里的说明http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the -iis7-integrated-pipeline /标题为"为整个应用程序启用表单身份验证".
现在,当我尝试通过直接访问http://www.mysite.com访问该网站时,我被重定向到http://www.mysite.com/Login.aspx?ReturnUrl=%2f而不是使用我的我已经设置了DefaultDocument.我可以通过访问http://www.mysite.com/Home.aspx来查看我的默认文档,没有任何问题,因为它设置为允许匿名访问.
我需要添加到我的web.config文件中以使iis7允许匿名访问根目录吗?我尝试添加匿名访问但没有这样的运气.
任何帮助将非常感激.
Home和Login表单都允许匿名.
<location path="Home.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
<location path="Login.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
登录表单设置为loginUrl
<authentication mode="Forms">
<forms protection="All" loginUrl="Login.aspx">
</forms>
</authentication>
Run Code Online (Sandbox Code Playgroud)
默认文档设置为Home.aspx
<defaultDocument>
<files>
<add value="Home.aspx" />
</files>
</defaultDocument>
Run Code Online (Sandbox Code Playgroud)
我没有删除任何iis7默认文档.但是,Home.aspx是优先考虑的问题.
我有一个FormsAuthentication cookie,它是永久性的,并且可以在开发,测试和生产环境中独立工作。我有一个可以进行身份验证的用户,创建了用户对象,并将身份验证Cookie添加到了响应中:
'Custom object to grab the TLD from the url
authCookie.Domain = myTicketModule.GetTopLevelDomain(Request.ServerVariables("HTTP_HOST"))
FormsAuthentication.SetAuthCookie(authTicket.Name, False)
Response.SetCookie(authCookie)
Run Code Online (Sandbox Code Playgroud)
对用户进行一点点处理以检查第一次登录,安全性问题等,然后使用以下提示重定向用户:
Session.Add("ForceRedirect", "/FirstTimeLogin.aspx")
Response.Redirect("~/FirstTimeLogin.aspx", True)
Run Code Online (Sandbox Code Playgroud)
通过调试中断,我可以验证cookie集合是否既包含与我出于不同目的设置的身份验证无关的cookie,也包含表单身份验证cookie。然后,该过程的下一步发生在global.asax中的ApplicationAuthenticateRequest处:
Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim formsCookieName As String = myConfigurationManager.AppSettings("FormsCookieName")
Dim authCookie As HttpCookie = Request.Cookies(formsCookieName)
Run Code Online (Sandbox Code Playgroud)
在这一点上,对于这个一个用户authCookie来说还算是什么。我还有15,000个其他用户没有受到这种方式的影响。但是,对于一个用户而言,cookie只是消失了而没有任何痕迹。我以前已经通过w3wp.exe异常,状态服务器异常和其他与IIS进程相关的异常看到了这一点,但是事件日志中没有任何异常。w3wp.exe不会崩溃,状态服务器有一些超时,但它们似乎不相关(已通过时间戳验证),并且仅在该一个域中的该用户身上发生(此代码在2个不同的TLD中使用,大约有10个其他子域) 。
我正在调查的一条途径是cookie可能太大了。我认为应该检查进入响应的cookie的大小,并且我认为它不会以这种方式对其产生影响。关于请求为何可能转储cookie的任何想法?
注意:我提到的我设置的辅助cookie也将被转储(非常小)。
编辑注释:发生这种情况时,会话令牌不会丢失。但是,由于身份验证cookie丢失,因此它将被忽略并在后续登录时被替换。
我遇到过一种情况,我尝试在方法中运行一行简单的代码
Dim res As DialogResult = frmOptions.ShowDialog()
但没有任何反应.该对话框不会出现.如果我从代码中的另一个位置运行此方法它执行正常(即在对话框模式下显示表单,此后代码执行正常).因此,它可能是我到达导致我的问题的代码的方式,但我看不出发现什么是错的.
当我暂停调试器时,代码行以绿色突出显示,但我无法看到它跳过它或进入它.
任何想法可能会导致这种情况发生,或者我应该寻找什么可能导致问题?
谢谢您的帮助!
我们是否知道asp.net用于创建身份验证cookie的算法(使用表单身份验证时?)
我们基本上可以创建自己的副本实现吗?如果是这样,怎么样?
它用于生成加密的cookie值,我知道它使用您传递给SetAuthCookie调用的任何内容(通常是userID/username).
我使用以下代码将属性传递给lambda表达式.
namespace FuncTest
{
class Test
{
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
Test t = new Test();
t.Name = "My Test";
PrintPropValue(t => t.Name);
}
private static void PrintPropValue(Func<string> func)
{
Console.WriteLine(func.Invoke());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译.我只是希望函数能够获取属性并能够进行评估.
为什么HttpContext.Current.User.IsInRole("Customer")如果用户没有登录则返回false,我认为因为用户被认为是匿名的,这种情况,正确吗?
谢谢
我正在使用ASP.NET MVC,我正在做的登录操作:
[AcceptVerbs("POST")]
public ActionResult Login(FormCollection form)
{
User validatedUser = // tests username/pwd here.
FormsAuthentication.RedirectFromLoginPage(
validatedUser.ID.ToString(), rememberMe);
if(String.IsNullOrEmpty(Request["ReturnUrl"]))
string redirectUrl = Request["ReturnUrl"];
if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
string redirectUrl = Request["ReturnUrl"];
}
Run Code Online (Sandbox Code Playgroud)
当我在登录页面时,我的网址看起来像这样:
http://localhost:56112/user/login?ReturnUrl=/admin/settings
Run Code Online (Sandbox Code Playgroud)
这里有什么不妥吗?
我的web.config:
<authentication mode="Forms">
<forms loginUrl="/user/login"
protection="All"
timeout="30"
name="SomeCookie"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx" />
Run Code Online (Sandbox Code Playgroud) 如何在我的应用程序中使用Ajax Minifier DLL.并且需要通过C#压缩脚本文件