加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 06:48:41 所属栏目:asp.Net 来源:网络整理
导读:我已经用表单身份验证编写了几个ms lightswitch应用程序 – 这在sql server中创建了aspnet_ *表. 如何在服务栈 – 应用程序中使用已定义的用户,密码,甚至成员资格,角色和应用程序权限? 解决方法 我没有测试过这个,但我认为它应该让你开始.很高兴我的任何步
我已经用表单身份验证编写了几个ms lightswitch应用程序 – >这在sql server中创建了aspnet_ *表.
如何在服务栈 – 应用程序中使用已定义的用户,密码,甚至成员资格,角色和应用程序权限?

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读