2013-02-28 66 views
4

如何实现辛格运河点登录(SSO)的跨域MVC4 Web应用程序如何实现单点登录在MVC4

+0

嘿你试过了什么?同样如果我们说SSO大部分时间可能会参与系统,并且您需要更好地解释您的问题才能获得真正的解析器 – 2013-02-28 06:08:59

+0

我正在登录MVC4中的一个Web应用程序。现在,在此站点上进行身份验证后,用户会尝试执行某些操作。要执行此操作,用户将使用相同的凭据重定向到另一个MVC4 Web应用程序。这两个应用程序都位于相同或不同的域中。但我对跨域应用程序更感兴趣。希望这个细节澄清我的问题.. – 2013-02-28 06:13:48

回答

1

最后,我能够实施。以下是与应用2到登录我在应用1

  • 获取选项进行

    • 登录的步骤
    • 点击“与应用2登陆”
    • 重定向到应用2
    • 的登录屏幕上点击重定向到SSOInMVCWcfService的App2的Login按钮。这里,Login方法调用App1服务的方法Authenticate,即SSOAuthService。如果通过身份验证,则会为此用户名生成令牌,并从App1的服务中检索用户ID。
    • 一旦为此Authenticated用户生成了标记并为用户标识检索到这些值,就会在数据库中的表中输入'SessionDetails'。
    • 然后发送当前用户的用户标识和令牌给App2。
    • 现在,App2通过在响应对象中添加这些值作为cookie,将app1的returnurl,即认证页面url以及用户标识和标记发送到App1的登录页面。
    • 现在在App1登录页面上检索这些cookie,并在userid的基础上从“SessionDetails”表中检索当前用户名。
  • 13

    同域SSO可以通过窗体身份验证Cookie的domain属性设置为根可以轻松实现域并为两个应用程序配置相同的机器密钥。

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

    下面是一些基本步骤:

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

    至于用户名加密到会话标识符的替代方案中,登录域可以简单地将该信息存储到共享(3个结构域之间)的数据存储和会话标识符将简单地是这个记录的识别符,以便其他域可以从此共享数据存储中检索用户名。

    +0

    如何在3个域之间加密共享秘密的会话ID。 – 2013-02-28 06:59:25

    +0

    最后,我能够实现..以下是我已经完成的步骤 – 2013-03-13 11:10:21

    +0

    @Darin真的很好的解释,谢谢! – formatc 2013-05-15 13:01:43