#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, см. Живые демонстрации с поддержкой аутентификации ниже:
- Приложение HttpBenchmarks
- Пошаговое руководство по аутентификации
- Twitter, Facebook, Google, LinkedIn и аутентификация учетных данных
- AWS Auth
- Twitter, Facebook, GitHub, Google, Yahoo, LinkedIn и аутентификация учетных данных
- Пример MVC и WebForms
- Twitter, Facebook, GitHub, Google, Yahoo, LinkedIn, VK, учетные данные и аутентификация Windows
- Чат
- Twitter и GitHub OAuth
- SocialBootstrap Api
- Twitter, Facebook, Yahoo и аутентификация учетных данных
но в стеке обслуживания, как плагины будут работать, не зная 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;
}
}