Аутентификация пользователя в ServiceStack

#c# #asp.net #sql-server #authentication #servicestack

#c# #asp.net #sql-сервер #аутентификация #servicestack

Вопрос:

Я не понял концепцию аутентификации и авторизации в servicestack. Я смотрел учебное пособие по pluralsight, но все же я не понимаю, как мы можем аутентифицировать имя пользователя и пароль из нашей существующей базы данных sql Server.
Например, если мы аутентифицируем пользователя в asp.net с помощью SQL server. там мы предоставляем connectionstring, а затем пишем запросы за кнопкой, но в стеке сервисов, как плагины будут работать, не зная connectionstring и как пользователь может войти в систему.

Пожалуйста, помогите мне: (

Ответ №1:

Если вы не уверены, как работает аутентификация в ServiceStack, я рекомендую посмотреть, как работают некоторые из демонстрационных версий, использующих аутентификацию:

Живые демонстрации

Чтобы проиллюстрировать интеграцию аутентификации с ServiceStack, см. Живые демонстрации с поддержкой аутентификации ниже:

но в стеке обслуживания, как плагины будут работать, не зная connectionstring и как пользователь может войти в систему.

ServiceStack не угадывает, если вы используете серверное хранилище данных RDBMS, вам нужно будет сообщить ServiceStack, зарегистрировав OrmLiteAuthRepository, который вам нужно будет передать IDbConnectionFactory , настроенный с помощью строки подключения к БД и типа БД, который вы хотите использовать, например:

 container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(
    dbConnectionString, PostgreSqlDialect.Provider));

container.Register<IAuthRepository>(c =>
    new OrmLiteAuthRepository(c.Resolve<IDbConnectionFactory>()));

//Create any UserAuth tables that are missing
container.Resolve<IAuthRepository>().InitSchema();
  

Аутентификация с помощью существующей базы данных

Но если вы хотите пройти аутентификацию с помощью существующей базы данных, вы не можете использовать существующие репозитории авторизации пользователей ServiceStack и вместо этого должны будете реализовать пользовательский поставщик аутентификации, реализующий TryAuthenticate() для проверки имени пользователя и пароля в вашей базе данных самостоятельно.

 public class CustomCredentialsAuthProvider : CredentialsAuthProvider
{
    public override bool TryAuthenticate(IServiceBase authService, 
        string userName, string password)
    {
        //Add here your custom auth logic (database calls etc)
        //Return true if credentials are valid, otherwise false
    }

    public override IHttpResult OnAuthenticated(IServiceBase authService, 
        IAuthSession session, IAuthTokens tokens, 
        Dictionary<string, string> authInfo)
    {
        //Fill IAuthSession with data you want to retrieve in the app eg:
        session.FirstName = "some_firstname_from_db";
        //...

        //Call base method to Save Session and fire Auth/Session callbacks:
        return base.OnAuthenticated(authService, session, tokens, authInfo);

        //Alternatively avoid built-in behavior and explicitly save session with
        //authService.SaveSession(session, SessionExpiry);
        //return null;
    }
}