C# 在实时环境的Cookie上启用SSL,在开发环境中启用非SSL

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

基本上,我的网站有一个要求,即所有cookie都必须安全。我正在尝试保护FormsAuthenticationCookie,但是,我希望它能够在我的本地开发人员站点上不必设置SSL,但是活动站点仍然会保护cookie

此live/dev状态存储在配置xml文件中。此文件包含运行站点的每台计算机的设置。可以通过Config.IsSecure访问它

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>