在servicestack中使用asp.net身份验证

use*_*241 4 asp.net authentication servicestack

我用表单身份验证编写了几个ms lightswitch应用程序 - >这在sql server中创建了aspnet_*表.如何在服务栈 - 应用程序中使用已定义的用户,密码,甚至成员资格,角色和应用程序权限?

paa*_*hpa 6

我没有测试过这个,但我认为它应该让你开始.很高兴我的任何步骤都得到了纠正.

我认为你需要做的事情......

  • 为了对两个"系统"进行身份验证,您需要设置Forms 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
});
Run Code Online (Sandbox Code Playgroud)
  • 创建子类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...
}
Run Code Online (Sandbox Code Playgroud)
  • AppHost配置方法中的ServiceStack的线路认证.

    var userRep = new CustomAuthRepository();
    
    container.Register<IUserAuthRepository>(userRep);
    
    Plugins.Add(
        new AuthFeature(() => new AuthUserSession(),
            new IAuthProvider[] {
                new CredentialsAuthProvider() 
            }
        ));
    
    Run Code Online (Sandbox Code Playgroud)