asp.net mvc 4 -如何在mvc c4中实现单点登录



如何在跨域MVC4 Web应用程序中实现单点登录(SSO)

通过将表单认证cookie的domain属性设置为根域并为两个应用程序配置相同的机器密钥,可以轻松实现同一域的SSO。

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

以下是一些基本步骤:

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

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

最后,我能够实现。以下是我所做的步骤

  • 登录App1
  • 获取登录App2的选项
  • 点击"登录App2"
  • 重定向到App2
  • 登录界面
  • 点击App2的登录按钮,重定向到SSOInMVCWcfService。这里,方法Login调用App1服务的方法Authenticate,即SSOAuthService。如果通过身份验证,则为该用户名生成令牌,并从App1的服务中检索用户id。
  • 一旦令牌生成和用户id检索到这个认证的用户,这些值被输入到表中,说数据库中的' SessionDetails '。
  • 将当前用户的用户名和令牌发送给App2。
  • 现在,App2通过在响应对象中将这些值作为cookie添加到app1的登录页面中,将返回值即app1的认证页面url以及用户id和令牌发送到app1的登录页面。
  • 现在在App1登录页面上,这些cookie被检索,并且在userid的基础上,从"SessionDetails"表中检索当前用户名。

相关内容

  • 没有找到相关文章

最新更新