即使 cookie 是在另一个应用程序中创建的,如何检查它是否存在? (使用 JS 或 C#)

2023-12-29

我有几个应用程序,其中一个是管理身份验证的中央应用程序,其中一个LogOn页面导入为IFrame到其他应用程序。

当。。。的时候userName and password是正确的,我创建了一个名为userInfo.

现在,在当前的应用程序中,我想检查 cookie 是否userInfo存在。我想我应该检查它是否存在于浏览器中(在客户端)。

这一定是可能的,那么我该怎么做呢?

提前致谢。


Cookie 不能跨域共享。如果您的应用程序未托管在同一域上,则必须忘记这一点。它不起作用,因为浏览器(出于明显的安全原因)不会跨域发送 cookie。还有其他方法可以实现跨域单点登录(请参阅我的答案的第二部分)。

现在,假设您的应用程序位于同一域中,并且您有多个应用程序分布在根域的不同子域中:

  • 登录.foo.com
  • app.foo.com
  • xxx.foo.com

并且您希望在这些子域之间共享身份验证。您所要做的就是指定设置domain将 web.config 中的属性添加到根域:

<authentication mode="Forms">
  <forms
    loginUrl="https://login.foo.com"
    requireSSL="true"
    protection="All"
    timeout="120"
    domain="foo.com"
    slidingExpiration="false"
    name="sso" />
</authentication>

相同的配置应该应用于web.config所有应用程序。这几乎就是您需要做的全部事情。一旦用户在其中一个子域上通过身份验证,由于 cookie 可以跨子域共享,他将自动在其他子域上进行身份验证。


如果您想实现跨域单点登录,那么您将不得不采取不同的方法。你可以使用相同的机器钥匙 http://msdn.microsoft.com/en-us/library/ff649308.aspx在不同的应用程序之间加密身份验证令牌。步骤如下:

  1. 用户导航至https://foo.com并显示登录屏幕,因为他尚未在此域上进行身份验证。
  2. 用户进行身份验证,并发出身份验证 cookie,该 cookie 对该用户有效foo.com domain.
  3. 现在用户需要转到https://bar.com并在该域上自动进行身份验证。在某些页面上https://foo.com您可以创建一个包含要发布的身份验证 cookie 值的表单:

    <form action="https://bar.com" method="post">
        <input type="hidden" name="token" value="PUT THE VALUE OF THE AUTHENTICATION COOKIE HERE" />
        <button type="submit">Go to bar.com</button>
    </form>
    
  4. 用户将身份验证cookie提交给bar.com。接收此表单提交的脚本读取已发布的身份验证令牌值并使用FormsAuthentication.Decrypt http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.decrypt.aspx方法解密身份验证票并读取用户名。由于这两个应用程序都在foo.com and bar.com使用相同的机器密钥,在 foo.com 上加密的票证将被 bar.com 成功解密
  5. 脚本位于bar.com从令牌中提取经过身份验证的用户名后,它会发出一个有效的表单身份验证cookiebar.com使用FormsAuthentication.SetAuthCookie http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.setauthcookie.aspx method.
  6. 用户现已通过身份验证bar.com

该模型的整体安全性依赖于以下事实:从 POST 表单身份验证令牌时使用 SSLfoo.com to bar.com所以令牌不能被捕获中间人 http://en.wikipedia.org/wiki/Man-in-the-middle_attack并且两个应用程序共享相同的机器密钥来加密和解密这些令牌。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使 cookie 是在另一个应用程序中创建的,如何检查它是否存在? (使用 JS 或 C#) 的相关文章

随机推荐