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

Rob*_*nik 32 iis-7 shared forms-authentication

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

http://localhost:90/
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:90/mvc/
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

这可能吗?怎么样?

重要

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

Rob*_*nik 38

我自己找到了.

这篇关于MSDN的文章正好谈到了这个场景.无论如何,我决定对任何想要在一段时间之后追逐相同信息的人保留这个问题.

MSDN:跨应用程序进行表单身份验证

简单来说

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


Sye*_*med 7

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

<machineKey validationKey="same key all over" 
            decryptionKey="same key all over" 
            validation="SHA1" decryption="AES"
            compatibilityMode="Framework20SP1"/>
Run Code Online (Sandbox Code Playgroud)