C# 在实时环境的Cookie上启用SSL,在开发环境中启用非SSL
基本上,我的网站有一个要求,即所有cookie都必须安全。我正在尝试保护FormsAuthenticationCookie,但是,我希望它能够在我的本地开发人员站点上不必设置SSL,但是活动站点仍然会保护cookie 此live/dev状态存储在配置xml文件中。此文件包含运行站点的每台计算机的设置。可以通过Config.IsSecure访问它C# 在实时环境的Cookie上启用SSL,在开发环境中启用非SSL,c#,asp.net,cookies,ssl,C#,Asp.net,Cookies,Ssl,基本上,我的网站有一个要求,即所有cookie都必须安全。我正在尝试保护FormsAuthenticationCookie,但是,我希望它能够在我的本地开发人员站点上不必设置SSL,但是活动站点仍然会保护cookie 此live/dev状态存储在配置xml文件中。此文件包含运行站点的每台计算机的设置。可以通过Config.IsSecure访问它 if (Config.IsSecure) { FormsAuthenticationTicket ticket = new FormsAuthe
if (Config.IsSecure)
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, login.Username, DateTime.Now, DateTime.Now.AddMinutes(30), false, "User", FormsAuthentication.FormsCookiePath);
string cookieStr = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);
cookie.Path = FormsAuthentication.FormsCookiePath;
System.Configuration.Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");
AuthenticationSection authenticationSection = (AuthenticationSection)configuration.GetSection("system.web/authentication");
FormsAuthenticationConfiguration formsAuthentication = authenticationSection.Forms;
formsAuthentication.RequireSSL = true;
cookie.Secure = true;
configuration.Save()
}
FormsAuthentication.SetAuthCookie(login.Username, false);
所以我在保存部分得到一个错误。表示存在无法访问的临时文件
你知道我怎么解决这个问题吗
Gurpreet我不太明白您想做什么,或者为什么要编写自定义代码来完成它。我相信您可以在web.config中将表单身份验证配置为对cookies使用SSL。然后为live和development创建一个不同的web.config requireSSL属性应该完全满足您的要求?(将cookie设置为仅安全,以便浏览器仅在安全连接上返回表单验证cookie) 类似(在web.config中)
如果您不想管理两个web.config文件,另一个选择是只需在本地计算机上安装一个证书,这真的不难做到 我想这个问题的答案就是你所需要的信息。只需确保您正确设置了主机名—您的计算机名或本地主机名,否则在尝试连接到站点时会收到警告
如果您使用的是VS2010/.net 4,那么也可以在web.config上执行转换,我相信:um。如果不保护整个站点,就无法保护cookie。cookie使用下载页面的标准HTTP请求进行交换,因此每个页面都必须是安全的 您要保护的是登录表单。。。但那不是饼干。如果在身份验证后重定向回http站点,cookie仍然是不安全的 更新:
安全只做一件事——如果没有SSL,它将不会将cookie传输到客户端。如果通过HTTP访问站点,则生成的cookie标头将不包含cookie。HttpCookie.Secure不会强制站点切换到SSL,如果我正确理解文档,它只会悄悄地破坏您的代码。我正在尝试避免在本地计算机上创建证书。只有在开发环境中才能通过http访问该站点。整个站点只在实时环境中的SSL上运行,那么问题出在哪里?仅使用URL重写器强制https,或仅允许https绑定,不允许http。您不需要编写任何代码,我不想在开发机器上强制使用SSL https,所以不要-只需更改配置即可。为什么您要在登录过程中尝试更改配置?将cookie设置为HTTPS下的安全和HTTP下的不安全,而无需设置web.configures的人工元素最简单的答案是在生产环境中使用IIS规则保护您的站点,该规则将强制所有请求为HTTPS,然后使用配置转换将表单身份验证配置的
requireSSL
属性设置为true。嘿,克里斯,我该如何“使用配置转换将表单身份验证配置的requireSSL属性设置为true”
<authentication mode="Forms">
<forms timeout="30" loginUrl="/MyLogin.aspx" protection="All" requireSSL="True" />
</authentication>