#exception-handling #active-directory
#исключение #active-directory
Вопрос:
Я использую Active Directory в качестве хранилища данных для пользователей моего веб-сайта. У меня Active Directory выдает следующее исключение на случай, если пароль не соответствует никакому ограничению политики паролей..
—> Указанный пароль неверен. Пароли должны соответствовать требованиям к надежности пароля, настроенным для поставщика по умолчанию.
Могу ли я каким-либо образом настроить эти сообщения / уведомления об ошибках, чтобы они были более конкретными??
Чего я хочу, так это того, что — если ‘password history’ является ограничением, которое нарушается, тогда в сообщении об ошибке должно быть указано это (например. Новый пароль должен отличаться от последних 10 использованных паролей ..)
Приветствуется любая помощь.
Комментарии:
1. Большинство из этих сообщений, связанных с безопасностью, являются «неспецифическими» по определенной причине — вы не хотите давать возможному злоумышленнику никаких намеков на то, что не так. Я бы оставил их «как есть»…
2. Хм.. Имеет смысл. Но нет ли способа отредактировать их??
Ответ №1:
вы можете перехватить это и throw
создать собственное сообщение
try {
// your error will probably appear here
if (MembershipService.ValidateUser(usr, pwd))
{
...
}
}
catch(Exception ex)
{
// Let's see if we have Inner Exceptions to deal
if(ex.InnerException != null)
while(ex.InnerException != null)
ex = ex.InnerException;
// Now, let's check our exception
if(ex.Message.StartsWith("The password supplied is invalid. Passwords must conform to the password strength requirements configured for the default provider."))
{
throw new Exception("My custom message goes here");
}
// Let's throw the original one
throw ex;
}
Это то, чего вы пытаетесь достичь?
Комментарии:
1. @balexandre — Спасибо за ответ. Но моя основная проблема в том, что я получаю одно и то же исключение и сообщение об ошибке для ограничения 3 паролей (история паролей, требования к сложности, минимальная длина). Итак, я не могу сказать им, что именно было не так?? Есть ли какой-либо способ, которым я могу это сделать??
2. Есть ли у кого-нибудь из ваших
Exception
ов внутренние исключения? — Код обновлен3. Да, все они имеют одинаковое внутреннее исключение — {«Произошло нарушение ограничения. (Исключение из HRESULT: 0x8007202F)»}
4. Если то, что вы получаете, точно такое же, то вы ничего не можете сделать в конце кода C #, может быть, есть политика, позволяющая описать это более подробно? Спросите на serverfault.com Но мне придется согласиться с
marc_s
, эти ошибки могут быть одинаковыми в propose.5. Ага .. Наконец-то проделал то же самое, просто настроил мое сообщение на более конкретное..
Ответ №2:
Что ж, вы должны увидеть точный тип исключения, которое генерируется, и настроить определенный catch для этого исключения.
Если вы видите эту ссылку, http://msdn.microsoft.com/en-us/library/0yd65esw.aspx , вы увидите, что вы можете перехватить несколько конкретных исключений.
Затем вы могли бы вернуть пользователю любой текст сообщения, который вы хотите.
Комментарии:
1. Я получаю одно и то же исключение для всех 3 нарушенных ограничений.. Что следует делать в этом случае??
2. Если вы знаете правила сложности, возможно, вам следует протестировать / подтвердить свои пароли заранее.
3. Да, я знаю правила сложности, но мой руководитель группы хочет «готовую реализацию» через поставщика..
4. Возможно, вы могли бы запросить правила в Active Directory и применить их программно, чтобы, даже если они изменятся, ваше приложение оставалось актуальным
5. Не могли бы вы, пожалуйста, дать мне несколько ссылок о том, как это реализовать??