3

我们目前正在将 .NET Web 应用程序迁移到 Azure 云服务,Web 层在多个节点上运行(最初是两个)。我想知道我们应该如何修改基于表单的身份验证机制以在负载平衡环境中运行?这是我们过去从未需要考虑的问题,因为我们的应用程序一直仅限于一台物理服务器。

目前我们在 web.config 中定义受保护的文件夹,如下所示:

<location path="secure-area">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

登录页面中的代码如下所示:

if accountIsValid = true then
   FormsAuthentication.SetAuthCookie(sessionID, False)
   response.redirect("secure-area/index.aspx")
end if

然后在整个应用程序中检索活动会话,如下所示:

Dim sessionID as string = User.Identity.Name.ToString

想必这种方法不会跨多个节点自动持久化会话状态吧?我想知道 Azure Fabric 控制器是否会为我解决所有这些问题,而无需更改代码。也许是一厢情愿!

任何帮助或在线指南链接将不胜感激!

4

1 回答 1

5

这不是关于 Azure 的问题,更多的是关于使用负载平衡 ASP.NET 应用程序的表单身份验证。Forms 身份验证使用服务器上的 machineKey 来加密发送给客户端的 cookie。默认情况下,此密钥是在每个实例的服务器上随机生成的。要使表单身份验证跨多个节点工作,您需要将机器密钥设置为在 web.config 中的两个实例中相同。这里有一些例子:

表单身份验证是否适用于 Web 负载均衡器?

http://msdn.microsoft.com/en-us/library/eb0zx8fc(v=vs.100).aspx

http://support.microsoft.com/kb/910443

希望这行得通,快乐的编码!

于 2013-02-21T18:37:06.797 回答