单点登录,就是实现多个站点中,在其中任合一个站点登录后访问其它站点不需要再次登录。它充许一个用户经过一次登录,就能访问所有资源。
单点登录就是通过.net 的Form验证机制。通过配置web.config文件来实现。一般的web.config文件,关于验证的配制都是这样写的。如下:
<authorization>
<deny users="?"/>
</authorization>
<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".ASPXAUTH"/>
</authentication>
要实现单点登录,需要增加一个配置字节<machineKey>。<machineKey>在<system.web>中,负责加密和解密窗体(这些窗体可以读窗体权限验证cookies)权限认证的cookie数据和view-state数据,也负责校验进程外(out-of-process)session 状态标识。所以当用户一旦被验证通过并且有一个cookie保存到了本地计算机,其他拥有同样<machineKey>配置的应用程序也可以识别此cookie为有效的权限票据。所以在其他拥有同样<machineKey>配置的应用程序中就不再需要第二次登陆了。
配置了相同的<machineKey>只能实现同一个站点的不同虚拟目录之间的登录,需要实现不同站点之间登录,要修改forms属性,domain。将domain设置成相同的主域。如alpha.cn这样就能实现不同站点之间登录。完整配置代码如下。
<authorization>
<deny users="?"/>
</authorization>
<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".ASPXAUTH" domain="alpha.cn"/>
</authentication>
<machineKey validationKey="282487E295028E59B 8F 411ACB689CCD 6F 39DDD21E 6055A 3EE480424315994760ADF21B580D8587DB675FA 02F 79167413044E25309CCCDB647174D5B3D0DD9141" decryptionKey="8B6697227CBCA902B 1A 0925D40FAA00B 353F 2DF4359D2099" validation="SHA1"/>
上面配置来只是实现了同一个主域的单点登录,比如:1.alpha.cn,2.alpha.cn,3.q.alpha.cn
跨主域还实现不了如:alpha.cn,beta.cn之间。
参考文档:
Asp.Net应用程序中为什么要MachineKey?如何生成MachineKey?