2013-02-25 28 views
4

我已經寫了幾個ms lightswitch應用程序與表單身份驗證 - >這在sql server中創建aspnet_ *表。 如何在服務堆應用程序中使用已定義的用戶,密碼,甚至是成員身份,角色和應用程序權限?使用asp.net認證與服務棧

+0

認爲這個答案有你需要的資源 - http://stackoverflow.com/questions/8711436/use-asp-net-membership-in-servicestack – paaschpa 2013-02-25 15:21:35

+0

我已經研究了這個答案,它不是我所需要的。這個答案告訴我如何使用表單認證和服務堆認證,我想要做的是直接在服務堆中使用表單認證。 – user1753241 2013-02-25 15:47:46

回答

6

我還沒有測試過這個,但我認爲它應該讓你開始。很高興在我的任何步驟中糾正錯誤。

事情我認爲你需要做的..

  • 爲了驗證對陣雙方「系統」你需要設置窗體的cookie並保存ServiceStack會議。

而不是調用FormsAuthentication.Authentiate()做下面的事情。在完成所有步驟之前,這不會起作用。

var apiAuthService = AppHostBase.Resolve<AuthService>(); 
apiAuthService.RequestContext = System.Web.HttpContext.Current.ToRequestContext(); 
var apiResponse = apiAuthService.Authenticate(new Auth 
{ 
    UserName = model.UserName, 
    Password = model.Password, 
    RememberMe = false 
}); 
  • 創建的IUserAuthRepository一個子類(從aspnet_ *表檢索會員/用戶/角色並填充ServiceStack爲AuthUser)。

CustomAuthRepository.cs(不完整的,但應該讓你開始)

public class CustomAuthRepository : IUserAuthRepository 
{ 
    private readonly MembershipProvider _membershipProvider; 
    private readonly RoleProvider _roleProvider; 

    public CustomAuthRepository() 
    { 
     _membershipProvider = Membership.Provider; 
     _roleProvider = Roles.Provider; 
    } 

    public UserAuth GetUserAuthByUserName(string userNameOrEmail) 
    { 
     var user = _membershipProvider.GetUser(userNameOrEmail, true); 
     return new UserAuth {FirstName = user.UserName, Roles = _roleProvider.GetRolesForUser(userNameOrEmail).ToList() //FILL IN REST OF PROPERTIES}; 
    } 

    public bool TryAuthenticate(string userName, string password, out UserAuth userAuth) 
    { 
     //userId = null; 
     userAuth = GetUserAuthByUserName(userName); 
     if (userAuth == null) return false; 

     if (FormsAuthentication.Authenticate(userName, password)) 
     { 
      FormsAuthentication.SetAuthCookie(userName, false); 
      return true; 
     } 

     userAuth = null; 
     return false; 
    } 
//MORE METHODS TO IMPLEMENT... 
} 
  • 線驗證了用於ServiceStack在APPHOST配置方法。

    var userRep = new CustomAuthRepository(); 
    
    container.Register<IUserAuthRepository>(userRep); 
    
    Plugins.Add(
        new AuthFeature(() => new AuthUserSession(), 
         new IAuthProvider[] { 
          new CredentialsAuthProvider() 
         } 
        )); 
    
+0

謝謝。我認爲這會幫助我開始,我會盡我的第一步,也許會回到你身邊?最好的祝福 – user1753241 2013-02-26 08:55:53