在两个Web应用程序之间共享验证

时间:2010-10-27 16:31:19

标签: iis-7 forms-authentication shared

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

http://localhost:90/

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

http://localhost:90/mvc/

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

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

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

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

    我已经阅读了有关共享相同system.web/machineKey值以提供此类功能的内容,但我想要一些真实的示例。

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

    这可能吗?怎么样?

    重要

    我已经阅读了有关此问题的其他问题/答案,但他们要么是询问跨域/跨服务器等。这个问题都在同一个IIS网站上。

2 个答案:

答案 0 :(得分:37)

我自己找到了。

这是MSDN上关于此场景的文章。无论如何,对于那些稍后会追逐相同信息的人,我决定保留这个问题。

MSDN: Forms Authentication Across Applications

简而言之

您必须在两个应用程序的web.config中配置机器密钥,以便它们匹配,因此它们将能够解码另一方生成的数据。这就是整个伎俩。 MSDN文章详细解释了这一点,包括如何生成这些密钥。

答案 1 :(得分:7)

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

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