Asp.net mvc 4 访问和标识WIF';密钥无效';AppHarbor的负载平衡云部署

Asp.net mvc 4 访问和标识WIF';密钥无效';AppHarbor的负载平衡云部署,asp.net-mvc-4,cloud,wif,appharbor,system.security,Asp.net Mvc 4,Cloud,Wif,Appharbor,System.security,现在,所有的人 使用Identity and Access的MVC应用程序遇到了一些问题,AppHarbor上的Azure STS出现了“Key not valid in specified state”(密钥在指定状态下无效)错误 据我所知,这是由于默认encrpytion使用机器密钥,这显然不适用于负载平衡的scnario 我尝试用RSA类替换 RsaEncryptedSessionSecurityTokenHandler:SessionSecurityTokenHandler 这会拾取要使

现在,所有的人

使用Identity and Access的MVC应用程序遇到了一些问题,AppHarbor上的Azure STS出现了“Key not valid in specified state”(密钥在指定状态下无效)错误

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

我尝试用RSA类替换 RsaEncryptedSessionSecurityTokenHandler:SessionSecurityTokenHandler

这会拾取要使用的pfx文件密钥(使用SelfCert创建),但虽然这在本地有效,但在appharbor站点上不起作用:System.Security.Cryptography.CryptographyException:密钥集不存在 我猜这是因为密钥不仅仅绑定到文件

那么,如何解决最初的问题呢?我一直在寻找一天的解决办法,但似乎没有什么适用于这种情况

短暂性脑缺血发作

编辑: 我已尝试调整此代码:

在新的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);
List sessionTransforms=新列表(新CookietTransform[]
{
新的deflateCookietTransform()
,
新的RSA加密CookieTransform
(e)
.FederationConfiguration
.标识配置
.服务证书)
,
新的RSASignatureOkietransform
(e)
.FederationConfiguration
.标识配置
.服务证书)
});
SessionSecurityTokenHandler会话处理程序=
新建SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());
e、 FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
但e.ServiceCertificate始终为空


有什么想法吗?

MachineKey可以工作,但您需要在配置中明确设置键。使用machineKey元素进行此操作。

请注意,AppHarbor会自动注入machineKey:并且没有选项使该负载平衡友好?machineKey内容应该是负载平衡友好的,所有工作人员都会注入相同的键。您可以在这里阅读更多内容:然后我不理解这句话:“从我收集的信息来看,这是由于默认encrpytion使用了机器密钥,这显然不适用于负载平衡场景”您是对的。但请注意,machineKey通常是(不在AppHarbor上时)自动生成的,不同的自动生成密钥在负载平衡设置中不起作用。