В моем codebehind классе, как я получаю авторизованные роли?

В настоящее время я работаю в компании, у которой есть код, к которому мы не хотим, чтобы кто-то имел доступ для безопасности наших клиентов и - что менее важно - по юридическим причинам. ; -)

Одним из возможных решений, которое вы могли бы найти, было бы переписать код, который вы считаете наиболее чувствительным, в библиотеку C / C ++. Можно было бы скомпилировать это в файл .so / .dll / .dylib для соответствующих ОС, и это усложнило бы, не совсем невозможно, но трудно декомпилировать.

Проблема заключается в том, чтобы узнать, как получить доступ к нативному коду из Java, так как большая часть документации не является полезной или просто отсутствует. Это будет использовать Java Native Interface (JNI), который позволяет Java взаимодействовать с собственным (скомпилированным C / C ++) кодом. Это позволило бы создать файл Jar, который фактически стал бы библиотекой Java, к которой вы могли бы обращаться на протяжении всего остального проекта. Однако нативный код по-прежнему необходимо загружать во время выполнения, но это помимо изучения того, как работает JNI. Полезная ссылка, которую я нашел для JNI, - http://jnicookbook.owsiak.org/ (пока это все еще функциональная ссылка).

Один из наших клиентов, где я работаю, имеет проект, написанный на Java, и ему нужно было реализовать наш код, который, к сожалению, полностью написан на C. Поэтому нам нужен был способ доступа к этому коду C / C ++ из Java. Именно так мы решили эту проблему, не переписывая наш код на Java. Но у нас было преимущество (?) В том, что мы уже написали наш код на языке C.

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

Мне было бы интересно узнать, какие возможные проблемы могут возникнуть у других с этим решением.

6
задан Rich Bennema 17 October 2008 в 21:46
поделиться

5 ответов

// set the configuration path to your config file
string configPath = "??";

Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath);

// Get the object related to the <identity> section.
AuthorizationSection section = (AuthorizationSection)config.GetSection("system.web/authorization");

от раздела объект получают объект AuthorizationRuleCollection, где можно затем извлечь Роли.

Примечание: Необходимо будет, вероятно, изменить путь к разделу немного, так как Вы запускаете с "пути местоположения = "RestrictedPage.aspx"", я не попробовал тот сценарий.

3
ответ дан 17 December 2019 в 18:21
поделиться
if {User.IsInRole("Group1Admin"){//do stuff}

Это что Ваше выяснение?

0
ответ дан 17 December 2019 в 18:21
поделиться

Я не уверен наверняка, но я думал бы, что это проверяется, прежде чем Ваша страница даже обрабатывается, поэтому если бы пользователь не находится в роли, они никогда не достигали бы Вашей страницы. Который в конечном счете сократил бы видимость этого на странице.

0
ответ дан 17 December 2019 в 18:21
поделиться

Я убежден, что существует лучший способ считать эту информацию, но здесь является способом, которым можно считать позволить значения из web.config файла.

XmlDocument webConfigReader = new XmlDocument(); 
webConfigReader.Load(Server.MapPath("web.config")); 

XmlNodeList root = webConfigReader.SelectNodes("//location[@path="RestrictedPage.aspx"]//allow//@roles"); 

foreach (XmlNode node in root) 
{ 
     Response.Write(node.Value); 
} 

Конечно, ролевой поставщик ASP.NET обработает это для Вас, так чтение этих значений только действительно релевантно, если Вы планируете сделать что-то с ними в коде - позади около авторизации пользователей, которых можно делать.

Надежда, которой это помогает - Вам, вероятно, придется разделить Ваш результат с помощью, символ.

0
ответ дан 17 December 2019 в 18:21
поделиться

То, что обычно происходит, является этим...

Когда пользователь поражает Вашу страницу, если аутентификация/авторизация активна, событие Application_Authentication генерируется. Если Вы не будете использовать аутентификацию Windows против чего-то как Active Directory, IPrincipal и объекты Идентификационных данных не будут доступны Вам, таким образом, Вы не можете получить доступ к Пользователю. IsInRole () метод. Однако Вы CAN делаете это путем добавления следующего кода в файл Global.asax:

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)

      Dim formsAuthTicket As FormsAuthenticationTicket
      Dim httpCook As HttpCookie
      Dim objGenericIdentity As GenericIdentity
      Dim objMyAppPrincipal As CustomPrincipal
      Dim strRoles As String()

      Log.Info("Starting Application AuthenticateRequest Method...")

      httpCook = Context.Request.Cookies.Get("authCookieEAF")
      formsAuthTicket = FormsAuthentication.Decrypt(httpCook.Value)
      objGenericIdentity = New GenericIdentity(formsAuthTicket.Name)
      strRoles = formsAuthTicket.UserData.Split("|"c)
      objMyAppPrincipal = New CustomPrincipal(objGenericIdentity, strRoles)
      HttpContext.Current.User = objMyAppPrincipal

      Log.Info("Application AuthenticateRequest Method Complete.")

End Sub

Это поместит cookie в сеанс браузера с надлежащим пользователем и ролевыми учетными данными, к которым можно получить доступ в веб-приложении.

Идеально, Ваш пользователь только собирается быть в одной роли в приложении, таким образом, я верю именно поэтому, что Вы имеете ролевой метод проверки в наличии для Вас. Было бы достаточно легко записать вспомогательный метод для Вас, которые выполнят итерации через список ролей в приложении и протестируют для наблюдения, в какой роли они находятся.

0
ответ дан 17 December 2019 в 18:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: