Как я могу исключить некоторые общественные собственности из того, чтобы быть сериализированным в JsonResult?

Существует 3 протокола аутентификации, которые могут использоваться для выполнения аутентификации между Java и Active Directory на Linux или любой другой платформе (и они не просто характерны для сервисов HTTP):

  1. Kerberos - Kerberos обеспечивает Единую точку входа (SSO) и делегацию, но веб-серверам также нужна поддержка SPNEGO для принятия SSO через IE.

  2. NTLM - NTLM поддерживает SSO через IE (и другие браузеры, если они правильно настроены).

  3. LDAP - который связывает LDAP, может использоваться для простой проверки имени учетной записи и пароля.

существует также что-то позвонившее "ADFS", который обеспечивает SSO для веб-сайтов с помощью SAML, который звонит в Windows SSP так на практике, это - в основном окольный способ использовать один из другого выше протоколов.

Каждый протокол имеет, это - преимущества, но как показывает опыт, для максимальной совместимости необходимо обычно пытаться "сделать, как Windows делает". Таким образом, что делает Windows?

Первый, аутентификация между двумя машинами Windows способствует Kerberos, потому что серверы не должны связываться с DC, и клиенты могут кэшировать билеты Kerberos, который уменьшает нагрузку на DCS (и потому что Kerberos поддерживает делегацию).

, Но если у сторон аутентификации оба нет учетных записей домена или если клиент не может связаться с DC, NTLM требуется. Таким образом, Kerberos и NTLM не являются взаимоисключающими, и NTLM не является obsoleted Kerberos. На самом деле до некоторой степени NTLM лучше, чем Kerberos. Обратите внимание, что при упоминании Kerberos и NTLM на одном дыхании я должен также упомянуть SPENGO и Интегрированную аутентификацию Windows (IWA). IWA является простым термином, который в основном означает Kerberos или NTLM или SPNEGO согласовывать Kerberos или NTLM.

Используя LDAP связывают, поскольку способ проверить учетные данные не эффективен и требует SSL. Но до недавнего времени реализация Kerberos и NTLM была трудной настолько использующий LDAP, поскольку импровизированная услуга аутентификации сохранилась. Но в этой точке этого нужно обычно избегать. LDAP является каталогом информации и не услуги аутентификации. Используйте его, поскольку это предназначило цель.

Поэтому, как Вы реализуете Kerberos или NTLM в Java и в контексте веб-приложений в особенности?

существует много крупных компаний как Quest Software и Centrify, которые имеют решения, это конкретно упоминает Java. Я не могу действительно прокомментировать их, поскольку они - общекорпоративные "решения по управлению идентификационных данных" так от взгляда маркетингового вращения на их веб-сайте, трудно сказать точно, какие протоколы используются и как. Необходимо было бы связаться с ними для деталей.

Реализация Kerberos в Java не ужасно тверд, поскольку стандартные библиотеки Java поддерживают Kerberos через org.ietf.gssapi классы. Однако до недавнего времени было главное препятствие - IE не отправляет необработанные маркеры Kerberos, это отправляет маркеры SPNEGO. Но с Java 6, был реализован SPNEGO. В теории необходимо быть в состоянии записать некоторый код GSSAPI, который может аутентифицировать клиенты IE. Но я не попробовал его. Реализация Sun Kerberos была комедией ошибок за эти годы так на основе послужного списка Sun в этой области, я не сделал бы обещаний об их реализации SPENGO, пока у Вас нет той птицы в руке.

Для NTLM, существует Бесплатный проект OSS под названием JCIFS, который имеет Фильтр Сервлета Аутентификации HTTP NTLM. Однако это использует man-in-the-middle метод для проверки учетных данных с сервером SMB, который не работает с NTLMv2 (который медленно становится необходимой политикой безопасности домена). По этой причине и другие, часть HTTP-фильтра JCIFS, как планируют, будет удалена. Обратите внимание, что существует количество ответвлений, которые используют JCIFS для реализации той же техники. Таким образом, если Вы видите другие проекты, которые утверждают, что поддерживали NTLM SSO, проверили мелкий шрифт.

единственный корректный способ проверить учетные данные NTLM с Active Directory использует СЕТЕВОЙ ВХОД В СИСТЕМУ переклички NetrLogonSamLogon DCERPC с Безопасным каналом. Такая вещь существует в Java? Да. Здесь это:

http://www.ioplex.com/jespa.html

Jespa составляет 100% Java реализация NTLM, которая поддерживает NTLMv2, NTLMv1, полные опции целостности и конфиденциальности и вышеупомянутую учетную проверку СЕТЕВОГО ВХОДА В СИСТЕМУ. И это включает Фильтр SSO HTTP, JAAS LoginModule, клиент HTTP, клиент и сервер SASL (с JNDI, связывающим), универсальный "поставщик систем обеспечения безопасности" для создания пользовательских сервисов NTLM и т.д.

Mike

8
задан Adrian Grigore 15 September 2009 в 17:38
поделиться

5 ответов

Вы можете поместить атрибут [ScriptIgnore] на элементы, которые не следует сериализовать. См. Пример Класс ScriptIgnoreAttribute в MSDN .

26
ответ дан 5 December 2019 в 05:26
поделиться

Extend the JavaScriptConverter class to not include properties with the NonSerializedAttribute. Then you can create a custom ActionResult that uses your JavaScriptConverter to serialize the object.

This creates a solid and testable class without having to (re)generate wrapper classes or using anonymous objects.

1
ответ дан 5 December 2019 в 05:26
поделиться

Вы можете создать класс-оболочку, который предоставляет только те свойства, которые вам нужны в JsonResult. В приведенном ниже примере Cow имеет 2 свойства - «Нога» и «Муу». Предположим, вы хотите выставить только "Leg" как свойство. Затем

Dim cw as CowWrapper = New CowWrapper (c)

вернет класс-оболочку, который предоставляет только "Leg". Это также полезно для таких вещей, как DataGridView, если вы хотите отобразить только некоторое подмножество свойств.

Открытый класс Cow

Открытое свойство ReadOnly Leg () as String

   get

      return "leg"

   end get

end Свойство

Открытое свойство ReadOnly Moo ( ) как String

   get

      return "moo"

   end get

end Свойство

end class

Открытый класс CowWrapper

Private m_cow as Cow = Nothing

Public Sub New(ByVal cow as Cow)

   m_cow = cow

end Sub


    m_cow = cow

Public ReadOnly Property Leg () как String

   get

      return m_cow.Leg()

   end get

Свойство end

end Class

0
ответ дан 5 December 2019 в 05:26
поделиться

Не совсем тот ответ, который вы ищете, но вы можете обмануть Json () , используя следующий код и анонимные классы:

MyModel model = ...;
return Json(new MyModel {model.Prop1, model.Prop2});
0
ответ дан 5 December 2019 в 05:26
поделиться

Взгляните на JSON.NET от Джеймса Ньютона-Кинга. Он сделает то, что вы ищете.

2
ответ дан 5 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

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