1

我有一个带有表单身份验证的 ASP.NET 应用程序。我还有一个子文件夹设置为单独的应用程序(不是虚拟目录),使用相同的应用程序池并使用相同的 web.config 身份验证设置。

出于某种我不明白的原因,这两个应用程序不共享相同的身份验证。例如,FormsAuthentication.SetAuthCookie 似乎独立工作,而 User.Identity.Name 在两个应用程序中返回不同的值。

我的问题是,他们如何共享相同的身份验证?我想登录一个应用程序,并以相同的身份出现在另一个应用程序上。我可以看到 .ASPAUTH cookie 具有相同的值(显然,因为它们在同一个域下)。但是单点登录如何工作?

谢谢 Themos

4

1 回答 1

4

即使应用程序在同一个 AppPool 中,两者的机器密钥也不同。通常,身份验证 cookie 使用机器密钥加密。

机器密钥的默认行为是使用IsolateApps ,它为每个 IIS 站点应用程序生成不同的机器密钥,而不是应用程序池。

由于您有两个不同的机器密钥,它们无法解密应用程序之间的身份验证 cookie。您需要为两个应用程序添加一个静态机器密钥(相同)。

您可以使用类似这样的网站来生成您自己的机器密钥。

此外,MSDN 文章Forms Authentication Across Applications还指定了需要在两个应用程序之间匹配的设置。

于 2013-03-20T15:07:15.737 回答