Запретить пользователю вход в систему на основе значения пользовательского атрибута - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть собственный атрибут, который я хотел бы использовать при аутентификации.Например, у меня есть другой атрибут расширения статуса, который может иметь возможные значения, такие как expired / заблокированный / неактивный / активный.При создании пользователя я буду следить за тем, чтобы для него было задано значение.

Во время входа в систему я также хотел бы рассмотреть этот атрибут расширения.Возможно, что пользователь вводит правильный пароль, но только потому, что его статус атрибута расширения имеет значение expired / заблокировано / неактивно, я хотел бы отказать в входе в систему и выдать настраиваемое локализованное сообщение об ошибке на основе значения атрибута extension.Это означает, что если статус истек, то я хотел бы показать сообщение как "Срок действия вашей учетной записи истек. Пожалуйста, свяжитесь с expired-account@xyz.com".если статус заблокирован, я хотел бы показать сообщение «Ваша учетная запись была заблокирована, пожалуйста, свяжитесь с вашим местным торговым представителем.

Если статус неактивен, то я хотел бы показать сообщение как« Ваша учетная запись быланеактивен более 2 лет.Пожалуйста, используйте активировать учетную запись , чтобы активировать свою учетную запись. "В этом сообщении я хотел бы получить ссылку в сообщении, если это возможно.

Я хотел бы использовать эти сообщения для локализации.

Примечание: я использую пользовательские политики.

Я использовал приведенную ниже ссылку для реализации чего-то подобного, но он работает только в черно-белом режиме, что означает, что если статус активен, то разрешено входить в систему для других пользователей.в другом статусе отображается то же сообщение. Запретить / запретить вход в систему для пользователя на основе атрибута расширения . Пожалуйста, не путайте с этой ссылкой, поскольку требования разные.

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

1 Ответ

0 голосов
/ 13 мая 2019

Итак, наконец, я смог заставить его работать. Мы благодарим Криса Паджетта (https://stackoverflow.com/users/7378174/chris-padgett)) за помощь и оперативные ответы.

Этого можно достичь, вызвав остальные API в пользовательских политиках: Вот справочная статья - https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-custom-rest-api-netfw#step-5-add-a-claims-provider

TechnicalProfile Id = "LocalAccountSignUpWithLogonEmail": добавляет проверка технического профиля на существующий технический профиль (определяется в базовой политике). Во время регистрации, проверка технической профиль вызывает предыдущий технический профиль. Если RESTful служба возвращает ошибку HTTP 409 (ошибка конфликта), ошибка сообщение отображается пользователю

Все, что мне нужно было сделать, это вызвать этот API остальных и передать ему значение пользовательского атрибута. На основании значения пользовательского атрибута я могу просто вернуть ответ с кодом статуса 409 (конфликт) http. Объект ответа должен выглядеть примерно так:

public class B2CResponseContent
{
    public string version { get; set; }
    public int status { get; set; }
    public string userMessage { get; set; }

    public B2CResponseContent(string message, HttpStatusCode status)
    {
        this.userMessage = message;
        this.status = (int)status;
        this.version = Assembly.GetExecutingAssembly().GetName().Version.ToString();
    }
}

Какое бы значение не было передано в свойстве userMessage, оно будет отображаться пользователю.

Еще раз большое спасибо @Chris за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...