我沒有在服務堆中獲得身份驗證和授權概念。 我一直在觀察pluralsight教程,但仍然沒有得到關於如何從我們現有的sql server數據庫驗證用戶名和密碼的觀點。
例如,如果我們使用SQL服務器在asp.net中對用戶進行身份驗證。在那裏,我們提供的ConnectionString,然後我們寫後面的按鈕,但在服務棧的插件將如何運作查詢不知道的ConnectionString以及用戶可以登錄。ServiceStack中的用戶身份驗證
請幫我:(
我沒有在服務堆中獲得身份驗證和授權概念。 我一直在觀察pluralsight教程,但仍然沒有得到關於如何從我們現有的sql server數據庫驗證用戶名和密碼的觀點。
例如,如果我們使用SQL服務器在asp.net中對用戶進行身份驗證。在那裏,我們提供的ConnectionString,然後我們寫後面的按鈕,但在服務棧的插件將如何運作查詢不知道的ConnectionString以及用戶可以登錄。ServiceStack中的用戶身份驗證
請幫我:(
如果你不確定ServiceStack認證是如何工作的,我建議看怎麼看一些Live Demos that use Authentication作品:
爲了說明與ServiceStack認證的集成,請參閱認證-E下面nabled現場演示:
但在服務棧的插件將如何在不知道的ConnectionString以及用戶可登錄工作。
ServiceStack不會猜測,如果您使用的是RDBMS backend data store,則需要通過registering an OrmLiteAuthRepository告訴ServiceStack,您需要將其通過IDbConnectionFactory
配置了要使用的DB連接字符串和數據庫類型,例如,G:
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現有的用戶認證信息庫而會需要implement a Custom Auth Provider實施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;
}
}