gpt4 book ai didi

asp.net-mvc - 为什么 FederatedAuthentication.WSFederationAuthenticationModule 在 MVC Azure ACS 联合身份验证中为 null?

转载 作者:行者123 更新时间:2023-12-02 01:43:30 26 4
gpt4 key购买 nike

我正在尝试使用来自 this 的代码,使用自定义服务器端登录页面将 FederatedAuthentication 与 .NET 4.5、MVC 4 和主动重定向结合在一起。教程,来自 this代码示例。

重定向到我的 AccountController 的 LogOn 方法工作正常,该方法如下所示:

public ActionResult LogOn()
{
HrdClient hrdClient = new HrdClient();
WSFederationAuthenticationModule fam = FederatedAuthentication.WSFederationAuthenticationModule; /*** Fails here because this is null **/
HrdRequest request = new HrdRequest(fam.Issuer, fam.Realm, context: Request.QueryString["ReturnUrl"]);
IEnumerable<HrdIdentityProvider> hrdIdentityProviders = hrdClient.GetHrdResponse(request);
ViewData["Providers"] = hrdIdentityProviders;
return View();
}

此操作失败,因为 FederatedAuthentication.WSFederationAuthenticationModule 为 null。

使用 VS 2012,我运行了新的身份和访问向导(它似乎取代了旧的 STS 对话框)。这给了我一个 FederationMetadata 文件夹,它看起来是正确的,并对我的 Web.Config 进行了一些修改。特别是,模块部分如下所示:

<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<add name="WSFederationAuthenticationModule" type="System.IdentityModel.Services.WSFederationAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler" />
</modules>

看到这样的答案89371238926099 ,我还添加了以下内容:

 <httpModules>
<add name="WSFederationAuthenticationModule" type="Microsoft.IdentityModel.Web.WSFederationAuthenticationModule, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpModules>

最后我的 nuget 包配置显示了 Microsoft.IdentityModel,MVC 应用程序正确引用了它:

<packages>
<package id="Microsoft.IdentityModel" version="6.1.7600.16394" targetFramework="net45" />
</packages>

我也见过this question在social.msdn上,这似乎表明STS对话框确实需要运行。

任何人都可以解释为什么 FederatedAuthentication.WSFederationAuthenticationModule 将为 null,以及我可以采取什么措施来阻止这种情况发生?

最佳答案

我自己设法解决了这个问题,并且由于 SO 上有一些与此类似的未解答问题,我将保留问题并发布我自己的答案。

该问题与将 MVC 应用程序升级到 .NET 4.5 有关。 WIF 的大部分功能保持不变(至少表面上如此),但类已全部移至不同的程序集。我按照此处的迁移指南解决了我的问题:http://msdn.microsoft.com/en-us/library/jj157089.aspx

最重要的是删除对 Microsoft.IdentityModel 的旧引用包 (v 3.5.0) 并确保它们被替换为类似的引用 System.IdentityModelSystem.IdentityModel.Services dll,应该是 4.0 版本,并且来自 GAC 而不是外部包。

我的修复步骤是:

  • 清除我添加到 Web.Config 中的所有垃圾,然后使用默认的 MVC 配置文件重新开始。
  • 删除 Microsoft.IdentityModel打包并取消引用 dll
  • 在 VS 2012 中运行访问和身份向导
  • 复制 System.IdentityModel.Services.WSFederationAuthenticationModule引用自<system.webServer><modules><system.web><httpModules>
  • 添加<authentication mode="Forms"><forms loginUrl="~/Account/LogOn" /></authentication>
  • 编译、测试、跳起欢乐的小吉格舞……

这得到了原始的WIF3.5/MVC3 Code Sample在.NET 4.5下工作

关于asp.net-mvc - 为什么 FederatedAuthentication.WSFederationAuthenticationModule 在 MVC Azure ACS 联合身份验证中为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com