【问题标题】:Sharing authentication between two web applications在两个 Web 应用程序之间共享身份验证
【发布时间】:2011-05-01 10:21:50
【问题描述】:

我有一个在 ie 下运行的基础网站(Asp.net WebForms 应用程序)。

http://localhost:90/

然后我创建了一个新的(这次是 Asp.net MVC)应用程序并将其添加到

http://localhost:90/mvc/

但不只是作为一个简单的虚拟文件夹,而是作为一个应用程序文件夹,通过定义一个不同的应用程序池来运行它,与父相比em> 应用程序。

由于浏览器不知道基本上在同一个域上有两个不同的应用程序,它的工作方式如下:

  1. 用户访问http://localhost:90/
  2. 父应用将用户重定向到表单身份验证屏幕
  3. 用户成功登录
  4. 父网站添加身份验证 cookie
  5. 用户访问http://localhost:90/mvc
  6. 浏览器附加来自父应用的相同 cookie

我是否可以根据同一个 cookie 对用户进行身份验证?我会将我的 MVC 应用程序配置为登录重定向到父应用程序以具有共享的身份验证屏幕。但我想知道从那时起谁进行了身份验证和工作。

我读过一些关于共享相同 system.web/machineKey 值以提供此类功能的内容,但我想要一些真实世界的示例。

我知道这两个应用程序将无法共享会话状态,这不是问题,因为我不希望它们这样做。我想要的只是一种单一登录(SSO/SSS)

这可能吗?如何?

重要

我已阅读有关此问题的其他问题/答案,但他们询问的是跨域/跨服务器等问题。此问题位于同一个 IIS 网站上。

【问题讨论】:

    标签: iis-7 forms-authentication shared


    【解决方案1】:

    我自己找到的。

    这是 MSDN 上的文章,它准确地讨论了这种情况。无论如何,我决定将这个问题留给以后会追查相同信息的任何人。

    MSDN: Forms Authentication Across Applications

    简述

    您必须在两个应用程序的web.config 中配置机器密钥,以便它们匹配,因此它们将能够解码对方生成的数据。这就是全部技巧。 MSDN 文章对此进行了非常详细的解释,包括如何生成这些密钥。

    【讨论】:

    • 我做了所有事情,我的一个应用在 mvc 4.5 上,另一个在 3.5 网络表单上,配置为在本地 IIS 上运行,但它们不共享 cookie :(
    • @RobertKoritnik 我认为缺少另一个配置,因为在 localhost cookie 上运行的两个项目都将共享,但在实际场景中,必须为子域 SSO 功能配置域名。例如 www.example.com,test .example.com,dev.example.com 为所有这些域名 cookie 配置域“.example.com”所以这个 cookie 由所有子域共享。
    【解决方案2】:

    如果有人仍然无法共享密钥,请使用 compatibilityMode="Framework20SP1"

    <machineKey validationKey="same key all over" 
                decryptionKey="same key all over" 
                validation="SHA1" decryption="AES"
                compatibilityMode="Framework20SP1"/>
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2019-03-23
    • 2011-01-17
    • 2011-03-27
    相关资源
    最近更新 更多