2012-04-06 123 views
2

我有一个ASP.NET MVC4应用程序,它使用DotNetOpenAuth 4.0.1来向使用OpenId提供程序(Google)的用户进行身份验证。所有在我的开发机器(本地主机)上正常工作。DotNetOpenAuth“违反了继承安全规则”

然而,当我部署Web应用程序服务器(共享主机),我收到以下错误,当我尝试验证(特别是,当我尝试创建一个OpenIdRelyingParty):

在覆盖成员时违反继承安全规则:'DotNetOpenAuth.Messaging.ProtocolException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'。覆盖方法的安全性可访问性必须与被覆盖的方法的安全性可访问性相匹配。

堆栈跟踪:

DotNetOpenAuth.Messaging.ErrorUtilities.VerifyProtocol(Boolean condition, String message, Object[] args) +0 
DotNetOpenAuth.Messaging.Channel.ValidateAndPrepareBindingElements(IEnumerable`1 elements) +524 
DotNetOpenAuth.Messaging.Channel..ctor(IMessageFactory messageTypeProvider, IChannelBindingElement[] bindingElements) +316 
DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel..ctor(IMessageFactory messageTypeProvider, IChannelBindingElement[] bindingElements) +48 
DotNetOpenAuth.OpenId.ChannelElements.OpenIdRelyingPartyChannel..ctor(ICryptoKeyStore cryptoKeyStore, INonceStore nonceStore, RelyingPartySecuritySettings securitySettings) +52 
DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty..ctor(ICryptoKeyStore cryptoKeyStore, INonceStore nonceStore) +570 
DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty..ctor() +65 
MyProject.Controllers.OpenIdController.Authenticate(String returnUrl) in OpenIdController.cs:81 
... 

我听说DotNetOpenAuth工作在中等信任很好,所以我很惊讶地得到一个错误。我该如何解决它?我需要修改DotNetOpenAuth源代码吗?还是有更简单的方法?

这个问题看起来类似于this one但我不知道源的哪些部分需要编辑。另外似乎很奇怪,没有人问过DotNetOpenAuth之前的这个问题,所以也许我做错了什么?请帮忙!

回答

0

看起来您正在运行以.NET 3.5为目标的DotNetOpenAuth构建。 .NET 4.0引入的重大更改是对不同安全属性的要求。你可以get the DotNetOpenAuth build that targets .NET 4.0 from NuGet

+0

感谢您的回复。我肯定有.NET 4版本(参考文献说'运行时版本v4.0.30319')。而我的应用程序正在引用正确的DLL,因为当我删除它们时,它会请求它们。任何想法还有什么可能? – James 2012-04-06 19:15:12

+0

我会将此标记为答案,但我不确定发生了什么。最后,我转移到另一个托管服务提供商,它的工作原理。 – James 2012-04-07 12:22:42

+0

我在.net 4上也有这个问题。我也很确定我使用的.NET 4.0之一... – Greg 2012-04-09 13:25:52