0

我创建了一个Cloud Service项目,其中包含一个MVC Applicationin aWeb Role和一个Worker Role. 在 MVC 项目中,我正在使用Windows Authentication......并且某些字段是根据被授权的用户进行管理的(没什么大不了的)。

当我将 MVC 项目“设置为启动项目”时,我Windows Identity Principal的表现很好......并且一切都按预期显示和工作(这很好)。

然后,是时候进行和调试Worker Role. 为此,我必须Windows Azure Emulator通过选择“设置为启动项目”来运行Cloud Service项目本身(然后按 F5)。这样做会Cloud Service触发Windows Azure Emulator.

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

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


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

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

网络配置的一部分:
这里没有什么特别的......

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

1 回答 1

1

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

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

因此,您需要实现一种身份验证表单,允许用户针对目录存储进行身份验证,这就是 Azure 目录服务的全部内容。这是Azure 目录服务方案的 MSDN 文档,其中包含示例实现的链接。

于 2014-06-07T04:39:36.913 回答