Identity Server (3) -> Добавить этап «Общие положения и условия» - PullRequest
1 голос
/ 29 марта 2019

Мы используем IdentityServer3, когда пользователь входит в систему, нам нужно проверить, приняли ли они условия предоставления услуг, и это должно быть частью Auth, каков будет способ реализовать это?

Можно ли перенаправить на страницу условий, прежде чем мы завершим вход в систему?

1 Ответ

1 голос
/ 30 марта 2019

Да, это возможно.

У них есть кое-что из этого документированного (больше похоже на подсказки, как это сделать). Из документов IdentityServer3 UserService :

Частичный вход в систему: в дополнение к полному входу в систему, API-интерфейсы аутентификации могут выполнить «частичный вход в систему». Частичный вход в систему позволяет службе пользователя прервать рабочий процесс входа пользователя и перенаправить его на пользовательскую страницу где они должны выполнить какое-то действие, прежде чем они смогут продолжить вход (например, выполнение 2fa, заполнение регистрационной формы или принятие EULA).

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

контекста аутентификации.

IdentityServer3.Samples CustomUserService на github имеет пример реализации. Вот фрагмент кода с соответствующими битами:

    public override Task AuthenticateLocalAsync(LocalAuthenticationContext context)
    {
        var user = Users.SingleOrDefault(x => x.Username == context.UserName && x.Password == context.Password);
        if (user != null)
        {
            if (user.AcceptedEula)
            {
                context.AuthenticateResult = new AuthenticateResult(user.Subject, user.Username);
            }
            else
            {
                context.AuthenticateResult = new AuthenticateResult("~/eula", user.Subject, user.Username);
            }
        }

        return Task.FromResult(0);
    }

Второй AuthenticateResult - это тот, который указывает, что нужно что-то еще сделать, так как включена ссылка для перенаправления ("~/eula", где вы бы поставили свою страницу «Условия и положения» с флажком).

...