0

现在所有。

在 AppHarbor 上使用 Identity and Access 和 Azure STS 的 MVC 应用程序遇到一些问题,给出“密钥在指定状态下无效”错误。

据我所知,这是由于使用机器密钥的默认加密,这显然不适用于负载平衡的 scnario。

我尝试用 RSA 类 RsaEncryptedSessionSecurityTokenHandler 替换: SessionSecurityTokenHandler

这会选择一个要使用的 pfx 文件密钥(使用 SelfCert 创建),但是虽然这在本地工作,但它在 appharbor 站点上不起作用: System.Security.Cryptography.CryptographicException: Keyset does not exist 我猜这是因为密钥不仅仅与文件相关联。

那么如何解决原来的问题呢?一直在寻找解决方案的一天,但似乎没有任何东西适用于这种情况。

TIA

编辑:我尝试过修改此代码:SessionSecurityTokenHandler 尝试使用 DPAPI 解密 RSA 加密 cookie 中的 SessionSecurityToken;为什么?

用于新的 WIF 4.5 内容,如下所示:

List<CookieTransform> sessionTransforms = new List<CookieTransform>(new CookieTransform[]
{
    new DeflateCookieTransform()
    ,
    new RsaEncryptionCookieTransform
        (e
             .FederationConfiguration
             .IdentityConfiguration
             .ServiceCertificate)
    ,
    new RsaSignatureCookieTransform
        (e
             .FederationConfiguration
             .IdentityConfiguration
             .ServiceCertificate)
});

SessionSecurityTokenHandler sessionHandler =
    new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());

e.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);

但 e.ServiceCertificate 始终为空。

有什么想法吗?

4

1 回答 1

1

MachineKey 确实有效 - 但您需要在 config.xml 中明确设置密钥。为此使用 machineKey 元素。

于 2013-01-09T15:11:55.180 回答