【问题标题】:If/When use "Azure Session State Provider (redis)" No need to use User.Identity.Name/IsAuthenticated?如果/何时使用“Azure Session State Provider (redis)”不需要使用 User.Identity.Name/IsAuthenticated?
【发布时间】:2015-05-17 15:20:08
【问题描述】:

在我们迁移到 Azure 农场后,我已将 Azure 会话状态提供程序 (redis) 隐含到我的 asp.net mvc 应用程序中,但是一些授权页面将我重定向到登录页面! 那是因为我在某些操作中使用了 User.Identity.Name 或 User.Identity.IsAuthenticated !! 我是否必须将 User.Identity.Name 替换为:

       // instead of below line
      //Boolean usern = User.Identity.IsAuthenticated;
      // is below lines :
        Boolean usern = "";
        object objValue = Session["usersession"];
        if (objValue != null)
           { usern = true;}
        else {usern = false;}

是吗,如果不是,为什么用户有时会重定向到再次登录!!!

【问题讨论】:

  • 换句话说,Redis azure session 是否意味着它自己为会员提供者,所以当获取 User.Identity.Name 时来自 Redis 会话!
  • 您是否在 web.config 中定义了您的机器密钥?
  • 汤米,请添加您的评论作为答案

标签: asp.net asp.net-mvc azure cloud session-state


【解决方案1】:

我认为会话管理不会这样做,无论 Azure Redis 还是其他方式。如果您使用的是 asp.net 身份验证 cookie,则需要进行更改以支持多个角色。

我知道这是一篇旧文章,但如果您查看Moving Applications to Microsoft Azure Cloud Services,您会看到:

应用程序还有另一项更改可能会导致 影响认证过程。如果您要运行 aExpense Azure 中多个 Web 角色实例上的应用程序,默认 cookie 加密机制(使用 DPAPI)不合适 因为每个实例都有不同的键。这意味着一个 由一个 Web 角色实例创建的 cookie 将无法被 另一个 Web 角色实例。要解决此问题,您应该使用 使用所有 Web 角色共享的密钥的 cookie 加密机制 实例。 Global.asax 文件中的以下代码显示了如何 替换默认的 SessionSecurityHandler 对象并将其配置为 使用 RsaEncryptionCookieTransform 类。

基本上,如果发生这种情况,重定向到登录页面是因为您正在跳转到另一个实例,并且它无法读取 asp.net auth cookie,因此只是假设用户未通过身份验证。

【讨论】:

    【解决方案2】:

    这可能不是会话问题,而是身份验证 cookie/票证问题。即使您仅使用单个实例/角色,Azure 也很可能会对其服务器进行负载平衡(这为它们提供了可靠性百分比)。这意味着您的应用程序实际上一次存在于多个服务器上。

    .NET 应用程序中的 MachineKey 负责加密和解密您的身份验证 cookie。在您的 web.config 中,如果您没有正确定义 <machineKey> 属性,那么 IIS 将为您组成一个机器密钥。如果您未定义,则运行该应用程序的每台服务器都将创建自己的机器密钥。结果,一个服务器能够解密并读取您的身份验证票,而下一个请求会发送到另一台无法解密身份验证票的服务器,因为它是使用不同的密钥加密的,并且该服务器认为您没有登录。

    要解决此问题,请打开您的 web.config 文件并定义您的 <machineKey> 属性并重新部署。使用新部署的应用程序登录后,您应该会看到此问题消失。

    Forms authentication and Machine Key information on MSDN

    Machine Key Generator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-23
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      • 2022-07-04
      • 2019-04-17
      • 2020-03-28
      相关资源
      最近更新 更多