【问题标题】:Use asp.net authentication with servicestack将 asp.net 身份验证与 servicestack 一起使用
【发布时间】:2013-02-10 16:52:35
【问题描述】:

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

【问题讨论】:

  • 认为这个答案有你需要的资源 - stackoverflow.com/questions/8711436/…
  • 我已经研究过这个答案,这不是我需要的。这个答案告诉我如何并排使用表单身份验证和服务堆栈身份验证,我想做的是直接在服务堆栈中使用表单身份验证。

标签: asp.net authentication servicestack


【解决方案1】:

我尚未对此进行测试,但我认为它应该可以帮助您入门。很高兴在我的任何步骤上得到纠正。

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

  • 为了对两个“系统”进行身份验证,您需要设置 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() 
            }
        ));
    

【讨论】:

  • 谢谢。我认为这将有助于我开始,我会迈出第一步,也许会回复你?最好的问候
猜你喜欢
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
  • 2020-03-12
  • 2018-05-15
  • 2011-11-25
  • 2017-05-10
  • 1970-01-01
  • 2017-04-02
相关资源
最近更新 更多