3

我正在尝试让 OpenID 身份验证在我的 Azure ASP.NET MVC 3 应用程序中工作,并已按照MVC 3 自定义登录示例中的步骤进行操作。在开发环境中一切正常,但在部署到 Azure 平台时却不行。

第一个问题始于身份验证,导致错误“Key not valid for use in specified state”。这里的讨论表明应用程序需要配置为使用 RsaEncryptionCookieTransform 而不是默认的 DPAPI。为了尝试解决这个问题,我添加了Alik Levin 博客上OnServiceConfigurationCreated描述的代码,但没有进一步说明,因为它描述了在开发中设置自签名证书(如上所述,这不是必需的),而不是在 Azure 中。

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

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

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

ID1024:配置属性值无效。
属性名称:'certificateReference'
错误:'ID1025:找不到符合条件的唯一证书。
店铺名称:'我的'
存储位置:'LocalMachine'
X509FindType: 'FindByThumbprint'
FindValue: '8A417...''

我真的需要更改加密方法来解决“密钥在指定状态下无效”错误吗?如果是这样,我如何使用 Azure 中已有的 X.509 证书来加密 cookie?

4

2 回答 2

4

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

请参阅http://claimsid.codeplex.com中的示例 #5

如果这是一个概念证明,并且您只想使用所有默认值运行。见这里:http: //msdn.microsoft.com/en-us/library/ff966484.aspx#sec3

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

于 2011-06-14T16:59:55.223 回答
1

最终,我(再次)找到了使用访问控制服务 v2.0 保护 Windows Azure Web 角色 ASP.NET Web 应用程序的文章。根据本文重新配置 ACS 管理门户的 web.config 和“依赖方应用程序”部分后,我能够让一切正常工作。具体来说,我只希望那些用 装饰的控制器操作(如本教程RequireAuthentication的 ACS 2.0 示例中所示)要求用户登录。这现在可以工作了。

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

在开发结构中,这按我的意愿工作,堆栈溢出风格,我能够在标准 HTTP 中运行所有内容,而无需使用证书,并且身份验证通过 SSL 进行。但是,由于 Azure 中的 RSA cookie 要求和证书的需要,这在云中不起作用。(如果 dev fabric 警告过这个和其他常见的陷阱,那就太好了。)我希望在未来的某个时候重新审视这个。

总之,我建议您先了解 Windows Identity Foundation 以及它如何应用于 Azure,然后再尝试提供的示例之外的任何内容。在撰写本文时可用的一些资源:

于 2011-06-16T23:13:49.553 回答