2016-10-10 103 views
0

我沒有在服務堆中獲得身份驗證和授權概念。 我一直在觀察pluralsight教程,但仍然沒有得到關於如何從我們現有的sql server數據庫驗證用戶名和密碼的觀點。
例如,如果我們使用SQL服務器在asp.net中對用戶進行身份驗證。在那裏,我們提供的ConnectionString,然後我們寫後面的按鈕,但在服務棧的插件將如何運作查詢不知道的ConnectionString以及用戶可以登錄。ServiceStack中的用戶身份驗證

請幫我:(

回答

2

如果你不確定ServiceStack認證是如何工作的,我建議看怎麼看一些Live Demos that use Authentication作品:

Live Demos

爲了說明與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; 
    } 
}