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