为什么使用Windows Azure模拟器时Windows身份验证失败

本文关键字:Windows 身份验证 失败 模拟器 Azure 为什么 | 更新日期: 2023-09-27 18:07:21

我创建了一个Cloud Service项目,其中包含Web Role中的MVC ApplicationWorker Role。在MVC项目中,我使用Windows Authentication…某些字段是根据被授权的用户来管理的(没什么大不了的)。

当我"设置为启动项目"到MVC项目时,我的Windows Identity Principal遇到了很好的…所有东西都显示&工作如预期(这是好的)。

然后,就到了处理&调试Worker Role。要做到这一点,我必须通过选择"设置为启动项目"来运行Windows Azure EmulatorCloud Service项目本身(然后按F5)。这样做会启动Windows Azure Emulator中的所有Cloud Service角色。

然而,当我这样做的IsAuthenticated属性是假的…我所有的HTML元素都消失了。

问题(S):
—为什么在本地运行Windows Azure Emulator会阻止Windows Authentication ?
-如果我需要"设置"模拟器…如何?


安全码部分:
这里没什么特别的…

var identity = filterContext.HttpContext.Request.LogonUserIdentity;
if (!identity.IsAuthenticated)
   RedirectToAccessDeniedPage(filterContext);

部分WEB配置:
这里没什么特别的…

<authentication mode="Windows" />
<identity impersonate="false" />

为什么使用Windows Azure模拟器时Windows身份验证失败

当您将MVC项目设置为启动项目时,您实际上是通过IIS在您的机器上本地运行该项目。IIS将自动使用您当前的NT凭据作为当前登录的用户,这是有意义的。

正如Parv Sharma在他的评论中所暗示的那样,当您将云服务设置为启动项目时,将启动一个单独的VM模拟器,模拟在云中会发生的事情。虽然虚拟机也在IIS中运行您的应用程序,但它不知道您是谁,因为您还没有登录。由于本地NT凭据没有存储在该VM中(无论如何,将用户凭据存储在VM中是没有意义的),因此IIS无法识别正在登录的您。

所以你需要实现一种形式的身份验证表单,允许用户对目录存储进行身份验证,这就是Azure目录服务的全部内容。以下是Azure目录服务场景的MSDN文档,其中包含示例实现的链接。