我有几个应用程序,其中之一是管理认证中心申请,并在一个LogOn
页面是由作为进口IFrame
到其他应用程序。
当userName
和password
是正确的,我创建了一个名为cookie的userInfo
。
现在,在当前的应用程序,我想检查的cookie的userInfo
存在。 我想我应该检查它在浏览器中存在的(在客户端)。
它必须是可能的,所以我该怎么办呢?
提前致谢。
我有几个应用程序,其中之一是管理认证中心申请,并在一个LogOn
页面是由作为进口IFrame
到其他应用程序。
当userName
和password
是正确的,我创建了一个名为cookie的userInfo
。
现在,在当前的应用程序,我想检查的cookie的userInfo
存在。 我想我应该检查它在浏览器中存在的(在客户端)。
它必须是可能的,所以我该怎么办呢?
提前致谢。
Cookie不能共享跨域。 如果应用程序不能在同一个域托管您对这个给忘了。 它不会工作,因为浏览器(明显的安全原因)不发送cookie跨域。 还有其他的方法来实现跨域单点登录(见我的回答的第二部分)。
现在让我们假设你的应用程序都在同一个域,你有散布在根域的不同子域中的多个应用程序:
而要将这些子域之间共享认证。 所有你需要做的就是指定设置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
的所有应用程序。 而这几乎是所有你需要做的。 一旦用户通过验证上,他将自动被别人感谢的事实,饼干可以共享跨子域上验证的子域之一。
如果你想在实现跨域单点登录,那么你将不得不采取不同的方法。 你可以使用相同的机键在不同的应用程序之间进行加密认证令牌。 具体操作步骤如下:
https://foo.com
并呈现一个登录界面,因为他没有在这一领域尚未验证。 foo.com
域。 现在,用户需要去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>
bar.com
。 接收到该表单提交的脚本内容被张贴和使用的认证令牌值FormsAuthentication.Decrypt
方法解密验证票证和阅读的用户名。 由于在这两个应用程序foo.com
和bar.com
使用相同的机键,这是在foo.com加密的票据将被成功解密bar.com bar.com
具有提取从令牌认证的用户名,它发射一个窗体身份验证cookie上有效bar.com
使用FormsAuthentication.SetAuthCookie
方法。 bar.com
该模型的整体安全性依赖于从张贴窗体身份验证令牌时使用SSL的事实foo.com
到bar.com
所以令牌不能被拍摄的人在这方面的中间人和这两个应用程序共享同一机键用于加密和解密这些令牌。