24

第一次在stackoverflow上发帖,但我喜欢这个网站!...

我已经使用 MVC 4 成功创建了一个功能齐全的 Azure 混合模型应用程序。已发布并且运行良好。现在我想将 ACS 认证添加到我的站点。我已经完成了所有步骤,但是当我在模拟中运行应用程序时,它无法重新定向到 ACS 并提供说明它找不到 login.aspx 的页面。

我创建了一个简单的网站解决方案,只是为了证明我的 ACS 设置正确并且工作正常。我注意到这两种解决方案的 web.config 文件大相径庭。

有人尝试过这样做吗?任何帮助,将不胜感激。

- - - - - 解决方案 - - - - - -

我终于得到了一切工作。 关键是删除 WebMatrix.WebData 引用,因为我不需要自己进行身份验证。以下内容来自MVC4 发行说明。

当 WebMatrix.WebData.dll 包含在 ASP.NET MVC 4 应用程序的 /bin 目录中时,它将接管用于表单身份验证的 URL。将 WebMatrix.WebData.dll 程序集添加到您的应用程序(例如,在使用“添加可部署依赖项”对话框时选择“带有 Razor 语法的 ASP.NET 网页”)将覆盖身份验证登录重定向到 /account/logon 而不是 /account /login 符合默认 ASP.NET MVC 帐户控制器的预期。

4

1 回答 1

3

打开您的 web.config 文件。

找到身份验证节点。

将其更改为:

<authentication mode="Forms" />

至:

<authentication mode="None" />

在这里评论,如果它没有帮助,以及更改 web.config 后的结果是什么。

作为一个附带问题 - 您是如何添加对 ACS 命名空间的引用 - 通过“右键单击 -> 添加 STS 引用”,还是手动更改 web.config ?

确保在 Web 服务器上注册了所需的模块:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ClaimsPrincipalHttpModule" type="Microsoft.IdentityModel.Web.ClaimsPrincipalHttpModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
      <add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
      <add name="SessionAuthenticationModule" type="Microsoft.IdentityModel.Web.SessionAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler" />
    </modules>
   ...
 </system.webServer>

还要确保您有 microsoft.identityModel 部分,并且其中有 federatedAuthentcation 节点:

<federatedAuthentication>
        <wsFederation passiveRedirectEnabled="true" issuer="https://[your_namespace].accesscontrol.windows.net/v2/wsfederation" 
                      realm="http://127.0.0.1:81/" requireHttps="false" />
        <cookieHandler requireSsl="false" />
</federatedAuthentication>

其中“realm”应为真实方申请的有效URL。而 requireHttps="false" 是为了简化开发过程。

当您在本地调试它时,请确保您正在运行 Cloud 项目(它使用 IIS),而不是 Web 项目(它将使用 Cassini / webdevserver,它不了解 system.webServer 部分!)

于 2012-04-23T21:57:27.763 回答