- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个网络应用程序可以安装在很多域和路径上。
所以:
相同代码的所有单独应用程序实例。
问题是,如果客户端登录 client1Name.{mySite.com},然后访问其他站点之一,他们的浏览器将发送身份验证 cookie。
在所有情况下,FormsAuthentication.SetAuthCookie
都不会设置Path
或Domain
。
我期望的是:
域
= client1Name.{mySite.com} 路径
= /域
= client2Name.{mySite.com} 路径
= /域
= demo.{mySite.com} 路径
= /prospect1Name 域
= demo.{mySite.com} 路径
= /prospect2Name 域
= demo.{mySite.com} 路径
= /prospect3Name 我可以手动覆盖 .Net 的行为来显式设置这些,但我不确定为什么我需要这样做 - 确保这应该是设置身份验证 cookie 时的默认行为,或者至少是一个无需重新设置即可设置的选项-写大块内容。
我错过了什么吗?有没有办法让 FormsAuthentication.SetAuthCookie
设置 Path
和 Domain
?
如果不是,动态读取最佳Path
和Domain
的最佳方法是什么?相同的代码必须在所有站点上运行,我不想添加进一步的配置 key 。
更新
这是我当前的解决方案:
// replacement for FormsAuthentication.SetAuthCookie(user.UserName, false);
// as that fails to limit the cookie by domain & path and fails.
var cookie = FormsAuthentication.GetAuthCookie(username, false);
cookie.HttpOnly = true;
cookie.Path = this.Request.ApplicationPath;
cookie.Secure = string.Equals("https", this.Request.Url.Scheme, StringComparison.OrdinalIgnoreCase);
// the browser will ignore the cookie if there are fewer than two dots
// see cookie spec - http://curl.haxx.se/rfc/cookie_spec.html
if (this.Request.Url.Host.Split('.').Length > 2)
{
// by default the domain will be the host, so www.site.com will get site.com
// this may be a problem if we have clientA.site.com and clientB.site.com
// the following line will force the full domain name
cookie.Domain = this.Request.Url.Host;
}
this.Response.Cookies.Add(cookie);
但是,对于 FormsAuthentication.SetAuthCookie
应该能够做到的事情来说,这似乎有很多解决方法。这真的是最好的方法吗?
最佳答案
我必须进行大量挖掘,但看起来 FormsAuthentication.SetAuthCookie
不支持此功能的原因是因为它不应该 - IIS不应该永远在身份验证cookie上设置路径,原因如下......
Cookie 路径区分大小写,因此:
http://站点/路径
http://site/PATH
浏览器有 2 个不同的 cookie - 它们(IE、FX、Safari、Opera 或 Chrome)都不会将 /PATH
的 cookie 发送到 /path
或反之亦然。
IIS 不区分大小写,但始终将 URL 重置为 ASP 应用程序名称的大小写。
这意味着,如果 IIS 应用程序名为“PATH”并且用户转到 http://site/path
,那么他们将被重定向到 http://site/path 登录/site/PATH/LogOn?ReturnUrl=/path
通过 IIS/ASP.Net
成功登录后,用户将被重定向回指定的 ReturnUrl
,因此:
http://site/path
http://site/PATH/LogOn?ReturnUrl=/path
/PATH
并将位置设置为 /path
(由 ReturnUrl
定义)http://site/path
/path
,它只有一个/PATH
的cookie,因此什么也不发送!http://site/PATH/LogOn?ReturnUrl=/path
如果用户使用 http://site/path
作为他们永远无法登录的应用程序的 URL,这会给用户带来问题。
除此之外,如果他们已经登录到 http://site/PATH
并收到了 URL,例如向 http://site/path/发送电子邮件resources/id
,他们将被要求重新登录,并且无法到达新路径。
这意味着除非您需要 /PATH
和 /path
是完全不同的站点(不太可能在某些仅限 UNIX 的环境之外),否则您永远不应该在身份验证时设置路径属性 cookies 。
关于asp.net - FormsAuthentication.SetAuthCookie 未设置路径或域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6695736/
所以,我在 Controller 中有代码: FormsAuthentication.SetAuthCookie("hello", true);throw new Exception("" + Use
我正在尝试在新环境中设置我的网站,但我遇到了成员(member)提供商的问题。 我可以调用 Membership.ValidateUser,它应该返回 true 和 false。太完美了。 但是,在我
您好,我正在对我的 ASP.Net MVC2 项目进行一些单元测试。我正在使用最小起订量框架。在我的 LogOnController 中, [HttpPost] public ActionResult
在检查用户的凭据并确认它们是正确的之后,我使用 FormsAuthentication.SetAuthCookie("Username", false); 来验证用户。 然后在母版页中,我使用 Pag
我正在开发一个 asp.net mvc 应用程序并创建了我的自定义用户数据库和注册程序(需要电子邮件验证)。我可以将 FormsAuthentication.SetAuthCookie 与我自己的登录
我有一个网络应用程序可以安装在很多域和路径上。 所以: client1Name.{mySite.com} client2Name.{mySite.com} 演示。{mySite.com}/prospe
我正在使用 createuserwizard 控件。在 CreatedUser 事件中,我放置了此代码以将用户添加到角色。 protected void RegisterUser_Create
我首先要说的是,也许这有点矫枉过正。 在我的登录例程中,我在使用 FormsAuthentication.SetAuthCookie 之前加密了用户的登录 ID。 问题是,如果加密字符串最终包含转义字
我正在使用 aspx 和 c# 为登录设置身份验证 cookie。 FormsAuthentication.SetAuthCookie(UserName, True) 我想在同一个 cookie 中存
我似乎找不到这个看似简单的问题的答案。 使用第一个或后者有什么区别?为什么我要使用第一个? 在 MSDNAA 上,我发现以下有关 Formsauthentication.setCookie() 的内容
因此 StackOverflow 上有很多关于此的帖子,但我仍然无法解决我的确切问题。这是要点: 我有一个需要身份验证的网站。我正在使用标准的 .NET FormsAuthentication.Set
我有一些代码用于创建身份验证票证。创建票证后,我们调用SetAuthCookie来设置cookie,例如: FormsAuthentication.SetAuthCookie(username, tr
在我的 MVC 3 应用程序中,我有一个非常基本的 Controller [HttpPost] public ActionResult SignIn(LogonModel logonModel) {
我有一些代码可以用来创建身份验证票证。创建票证后,我们调用 SetAuthCookie 来设置 cookie,例如: FormsAuthentication.SetAuthCookie(usernam
我在测试中使用了 Form Authentication。还有一些测试用户名。但发现指定名称的奇怪问题。这是所有测试名称,只有一个名为 amybeyond 的名称可以在测试中使用。 请帮助检查我的测试
我正在尝试使用基本表单例份验证实现 ASP.NET MVC5 应用程序。所以有我的登录方法: [HttpPost] [AllowAnonymous] public Action
问题一: setAuthCookie 是否比 FormsAuthentication.Encrypt(ticketVariable) 更不安全? 我的意思是,如果有人试图通过修改用户名来修改 setA
好的,我很困惑,asp.net 中的 FormsAuthentication.SetAuthCookie() 是否创建基于 session 的 cookie?从我收集到的将一些东西放入 session
我发现 FormsAuthentication.SetAuthCookie 抛出 NullReferenceException - 未将对象引用设置为天蓝色网站上的异步操作内的对象实例。 我发现了以下
很抱歉,如果这已经被覆盖,但我要拔掉我的头发。我的网站正在使用表单例份验证,当我在//localhost 上测试时它运行良好,但是当我发布到网络时它在 IE9 中不起作用。我已按照教程中列出的所有步骤
我是一名优秀的程序员,十分优秀!