如何检查是否即使是在其他应用程序中创建存在饼干吗? (使用JS或C#)(How to check

2019-09-18 01:33发布

我有几个应用程序,其中之一是管理认证中心申请,并在一个LogOn页面是由作为进口IFrame到其他应用程序。

userNamepassword是正确的,我创建了一个名为cookie的userInfo

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

它必须是可能的,所以我该怎么办呢?

提前致谢。

Answer 1:

Cookie不能共享跨域。 如果应用程序不能在同一个域托管您对这个给忘了。 它不会工作,因为浏览器(明显的安全原因)不发送cookie跨域。 还有其他的方法来实现跨域单点登录(见我的回答的第二部分)。

现在让我们假设你的应用程序都在同一个域,你有散布在根域的不同子域中的多个应用程序:

  • login.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的所有应用程序。 而这几乎是所有你需要做的。 一旦用户通过验证上,他将自动被别人感谢的事实,饼干可以共享跨子域上验证的子域之一。


如果你想在实现跨域单点登录,那么你将不得不采取不同的方法。 你可以使用相同的机键在不同的应用程序之间进行加密认证令牌。 具体操作步骤如下:

  1. 用户导航到https://foo.com并呈现一个登录界面,因为他没有在这一领域尚未验证。
  2. 用户身份验证和身份验证Cookie发出后有效期为foo.com域。
  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方法解密验证票证和阅读的用户名。 由于在这两个应用程序foo.combar.com使用相同的机键,这是在foo.com加密的票据将被成功解密bar.com
  5. 在脚本bar.com具有提取从令牌认证的用户名,它发射一个窗体身份验证cookie上有效bar.com使用FormsAuthentication.SetAuthCookie方法。
  6. 现在的用户进行身份验证对bar.com

该模型的整体安全性依赖于从张贴窗体身份验证令牌时使用SSL的事实foo.combar.com所以令牌不能被拍摄的人在这方面的中间人和这两个应用程序共享同一机键用于加密和解密这些令牌。



文章来源: How to check if a cookie exists even if it was created in another application? (using JS or C#)