我已经编写了几个带有表单身份验证的 ms lightswitch 应用程序 -> 这会在 sql server 中创建 aspnet_* 表。如何在服务堆栈 - 应用程序中使用定义的用户、密码,甚至成员资格、角色和应用程序权限?
问问题
1204 次
1 回答
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
});
- 创建一个子类
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...
}
在 AppHost 配置方法中为 ServiceStack 连接身份验证。
var userRep = new CustomAuthRepository(); container.Register<IUserAuthRepository>(userRep); Plugins.Add( new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] { new CredentialsAuthProvider() } ));
于 2013-02-25T23:09:40.177 回答