如何在MVC4中实现单点登录

Jol*_*Tri 4 cross-domain single-sign-on asp.net-mvc-4

如何在跨域MVC4 Web应用程序中实现Singel Sign On(SSO)

Dar*_*rov 13

通过将domain表单身份验证cookie 的属性设置为根域并为两个应用程序配置相同的计算机密钥,可以轻松实现相同的域SSO .

跨域SSO更具挑战性.有不同的技术来实现它.例如,StackExchange使用HTML5本地存储.他们的机制描述于this blog post.

以下是一些基本步骤:

  1. 为用户设置主域以进行登录.例如logon.com
  2. 当未经身份验证的用户尝试访问某些2个应用程序上的受保护资源时,会将其重定向到登录域进行身份验证.
  3. 用户进行身份验证,登录域生成包含登录用户的用户名的会话标识符.此会话ID使用对称算法加密,并在3个域之间具有共享密钥.登录域还设置表单身份验证cookie,以指示用户已在此处进行身份验证.
  4. 登录域重定向回到沿会话标识符传递的受保护资源.
  5. 持有受保护资源的应用程序解密会话ID以提取用户名并在其域上设置表单身份验证cookie.
  6. 用户在第二个域上请求受保护的资源.
  7. 由于他尚未通过身份验证,因此会被重定向到登录域.
  8. 用户已在登录域上进行身份验证,并生成并传回使用相同技术的会话标识符
  9. 第二个域解密会话标识符以提取用户名并为第二个域发出表单身份验证cookie.

作为将用户名加密到会话标识符的替代方法,登录域可以简单地将该信息存储到共享(在3个域之间)数据存储中,并且会话标识符将仅仅是该记录的标识符,以便其他域可以检索此共享数据存储中的用户名.