Asp.net mvc 3 如何解决;密钥在指定状态下无效;使用Azure ACS时出错?

Asp.net mvc 3 如何解决;密钥在指定状态下无效;使用Azure ACS时出错?,asp.net-mvc-3,azure,x509,acs,Asp.net Mvc 3,Azure,X509,Acs,我正在尝试让OpenID身份验证在我的Azure ASP.NET MVC 3应用程序中工作,并且已经按照中的步骤进行了操作。在开发环境中,一切都可以正常工作,但部署到Azure平台时就不行了 第一个问题始于身份验证,导致错误“密钥在指定状态下无效”。声明需要将应用程序配置为使用RSAEncryptionCookietTransform而不是默认的DPAPI。为了尝试解决这个问题,我添加了所述的OnServiceConfiguration Created的代码,但没有进一步说明,因为它描述了在开发

我正在尝试让OpenID身份验证在我的Azure ASP.NET MVC 3应用程序中工作,并且已经按照中的步骤进行了操作。在开发环境中,一切都可以正常工作,但部署到Azure平台时就不行了

第一个问题始于身份验证,导致错误“密钥在指定状态下无效”。声明需要将应用程序配置为使用RSAEncryptionCookietTransform而不是默认的DPAPI。为了尝试解决这个问题,我添加了所述的
OnServiceConfiguration Created
的代码,但没有进一步说明,因为它描述了在开发中设置自签名证书(如前所述没有必要),而不是在Azure中

我尝试使用Azure中已有的X.509证书,而不是那种方法。我在Windows Azure管理>访问控制服务>依赖方应用程序>(我的应用程序名称)>令牌签名证书>下找到了用于服务命名空间(X.509证书)的指纹。然后,我将此引用添加到web.config:

<serviceCertificate>
    <certificateReference x509FindType="FindByThumbprint" findValue="8A417..." />
</serviceCertificate>

现在,我在应用程序启动时收到一个配置错误:

ID1024: The configuration property value is not valid. Property name: 'certificateReference' Error: 'ID1025: Cannot find a unique certificate that matches the criteria. StoreName: 'My' StoreLocation: 'LocalMachine' X509FindType: 'FindByThumbprint' FindValue: '8A417...'' ID1024:配置属性值无效。 属性名称:“certificateReference” 错误:“ID1025:找不到与条件匹配的唯一证书。 店名:“我的” StoreLocation:'LocalMachine' X509FindType:“FindByThumbprint” FindValue:“8A417…”
我是否确实需要更改加密方法来解决“密钥在指定状态下无法使用”错误?如果是这样,我如何使用Azure中已有的X.509证书来加密Cookie?

您所指的证书是ACS使用的令牌签名证书。您需要在您的web角色中部署一个证书,以便WIF可以使用它来加密Cookie(与令牌无关)。您必须在Windows Azure部署中添加证书。(服务配置)

参见中的样本#5

如果这是一个概念验证,并且您只想使用所有默认值运行。请看这里:

您需要设置“Load User Profile=true”,这样DPAPI才能工作。(这可能是您本地机器中的内容)。

最终我(再次)找到了这篇文章。在根据本文重新配置web.config和ACS管理门户的“依赖方应用程序”部分后,我能够让一切正常工作。具体地说,我只希望那些用
RequireAuthentication
修饰的控制器操作(如ACS2.0示例所示)要求用户登录。这现在起作用了

唯一的缺点是整个应用程序必须在SSL中运行,用户体验才能无缝。否则,当用户在HTTP中运行时,系统会提示用户进行身份验证,并对其进行身份验证,然后将其转储回显然未经身份验证的HTTP。但是,切换到SSL端点时,用户已通过身份验证

在developmentfabric中,这是我想要的工作方式,堆栈溢出风格,我能够在标准HTTP中运行所有内容,而无需使用证书,通过SSL进行身份验证。但是,由于Azure中的RSA cookie要求以及对证书的需要,这在云中不起作用。(如果dev fabric对此和其他方面提出警告,那就太好了。)我希望在将来的某个时候重新讨论这个问题

总结,我建议您了解Windows身份基础,以及它如何应用于Azure,然后尝试任何超出提供的示例。撰写本文时提供的一些资源:

  • (特别是关于ACS和WIF的文章)

在查看了示例并阅读了此Codeplex网站上的更多文档后,我现在对此有了更多的了解。我创建并上传了证书。我不再有错误,只是登录链接在Azure平台上没有任何作用。很高兴听到它很有用。您是否正在本地Azure仿真程序中运行?(在部署到云端之前,您可能应该先从那里开始)登录链接指向哪里?我在本地模拟器中运行的所有东西都没有证书或任何问题,只有在部署到Azure时我才遇到所有这些问题!我这样做是为了证明概念,所以可能没有时间了,但我会尝试重新访问并让这部分工作。我遇到了与您相同的问题,我遵循了您发布的指南,但有一个问题要问您。每次在VisualStudio中运行项目时,您都被重定向到访问控制。如果是这样的话,你是怎么解决的?您的站点访问者是否每次都被重定向到该领域,还是仅在开发环境中重定向到该领域?@Bombcode很早以前,我就记不清具体内容了,对不起。但是我记得ACS的行为是不同的,这取决于我是在dev中运行还是在Azure平台上运行。好的,谢谢Alex在进一步调试后我发现了这个问题。我拒绝所有用户。我现在已经允许所有用户,并且已经阻止了网站的某些区域。