Исключение безопасности - приложение попыталось выполнить операцию, не разрешенную политикой безопасности - PullRequest
0 голосов
/ 01 февраля 2012

У меня есть простая реализация, где я создаю экземпляр OpenIdRelyingParty, а затем вызываю RedirectToProvider. Он отлично работает в размещенной среде 1and1, а также в Cassini (Visual Studio 2010). Однако при развертывании его на IIS на моем ПК (Windows 7) появляется исключение безопасности:

" Приложение попыталось выполнить операцию, не разрешенную политикой безопасности. Чтобы предоставить этому приложению необходимое разрешение, обратитесь к системному администратору или измените уровень доверия приложения в файле конфигурации ."

где-то в следующем коде:

protected void Button1_Click(object sender, ImageClickEventArgs e) 
{ 
    string realm = WebConfigurationManager.AppSettings["Realm"]; 
    Uri returnPath = new Uri(new Uri(realm), "welcome.aspx"); 
    using (OpenIdRelyingParty openId = new OpenIdRelyingParty()) 
    { 
        IAuthenticationRequest request = openId.CreateRequest("https://www.google.com/accounts/o8/id", 
              new DotNetOpenAuth.OpenId.Realm(realm), returnPath); 
        request.RedirectToProvider(); 
    } 
} 

Сообщение об ошибке является загадочным, а статьи базы знаний по его устранению еще более серьезны.

  • Кто пытается выполнить какую операцию?
  • Что пытается получить доступ к DotNetOpenAuth?
  • Кто или что не доверяет кому?
  • О какой политике безопасности идет речь?
  • Что в этой политике?
  • Где я могу найти его или изменить?

Спасибо.


2 мая 2012 г.

По запросу, вот стек вызовов:

[SecurityException: Request for the permission of type 'System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed) +150
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Object assemblyOrString, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed) +100
System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet grants, PermissionSet refused, PermissionSet demands, RuntimeMethodHandle rmh, Object assemblyOrString, SecurityAction action, Boolean throwException) +283
System.Security.PermissionSetTriple.CheckSetDemand(PermissionSet demandSet, PermissionSet& alteredDemandset, RuntimeMethodHandle rmh) +69
System.Security.PermissionListSet.CheckSetDemand(PermissionSet pset, RuntimeMethodHandle rmh) +150
System.Security.PermissionListSet.DemandFlagsOrGrantSet(Int32 flags, PermissionSet grantSet) +30
System.Threading.CompressedStack.DemandFlagsOrGrantSet(Int32 flags, PermissionSet grantSet) +40
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32 permission, PermissionSet targetGrant, CompressedStack securityContext) +123
System.Security.CodeAccessSecurityEngine.ReflectionTargetDemandHelper(Int32 permission, PermissionSet targetGrant) +54

1 Ответ

0 голосов
/ 02 февраля 2012

Скорее всего, это исходящий HTTP-запрос, который OpenID должен сделать для входа пользователей. Если ваш файл web.config настраивает сайт для работы со средним доверием, попробуйте увеличить его до высокого или полного доверия.

Причина, по которой среднее доверие работает в размещенных средах, но не «дома», заключается в том, что стандартная конфигурация среднего доверия, которая поставляется с ASP.NET, не разрешает исходящие HTTP-запросы, но большинство сред общего хостинга изменяют этот параметр, так что среднее доверие позволяет.

Дома самый простой способ решить эту проблему - повысить уровень доверия к файлу web.config.

...