2013-02-25 74 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