适合每个人的单点登陆(SSO)

  单点登陆(SSO),一个很老的问题.

详细内容请参考 Single Sign-On for everyone

Michael Morozov对很多情形的SSO做了阐述: 

1.         /子应用在虚拟子目录之间的SSO.
2.         不同授权凭证应用之间的SSO(用户名重映射)
3.         同根下的二级子域名应用之间的SSO
4.         不同.NET版本应用之间的SSO
5.         不同域名应用之间SSO.
6.         混合验证模式下的SSO(窗体验证/Windows验证)

尽管已经详细描述了这么多种情形,但我还是遇到了一点儿问题. 花了俺一天, 特此共享一下:
(我测试的是: http://localhost/test1/, http://localhost/test2/, http://localhost/test3/)

1.       在所有应用的web.config中设定相同的name,.CROAUTH
<authentication mode="Forms">
   <forms name=".CROAUTH" protection="All" loginUrl="Login.aspx" />
</authentication>

2.       所有应用的web.configSystem.Web节点下添加machineKey,默认值是各个应用自动生成的
<machineKey validationKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902" decryptionKey="F9D1A2D3E1D3E2F7B3D9F90FF3965ABDAC304902F8D923AC" validation="SHA1" />

3.       每个应用都是独自的登陆页面,验证后以RedirectFromLoginPage跳转.
    if(fa.Login(strLogCode,strPassword))
        FormsAuthentication.RedirectFromLoginPage(strLogCode, false);

4.       尽管号称SSO,他们仅共享cookie,跳转时有几个应用仍将建立几个Seesion.
  各应用之间仅共享登陆名信息,需有Session补全信息机制.如根据LogCode取部门,邮件等.

原文地址:https://www.cnblogs.com/crabo/p/661949.html