Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET标识-使用多提供程序的自定义实现_C#_Asp.net_Forms Authentication_Asp.net Identity - Fatal编程技术网

C# ASP.NET标识-使用多提供程序的自定义实现

C# ASP.NET标识-使用多提供程序的自定义实现,c#,asp.net,forms-authentication,asp.net-identity,C#,Asp.net,Forms Authentication,Asp.net Identity,我目前正在为汽车经销商做一个大项目,我左右为难 我应该使用ASP.NET身份验证还是旧式身份验证? 我需要能够通过2个提供商登录。首先,用户总是在数据库中,但是我们检查它是否是LDAP用户,如果是,则通过LDAP对其进行身份验证(对于具有登录方法的用户,我使用WebService) 以下是我的登录方法: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<Actio

我目前正在为汽车经销商做一个大项目,我左右为难

我应该使用ASP.NET身份验证还是旧式身份验证?

我需要能够通过2个提供商登录。首先,用户总是在数据库中,但是我们检查它是否是LDAP用户,如果是,则通过LDAP对其进行身份验证(对于具有登录方法的用户,我使用WebService)

以下是我的登录方法:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            var userInDb = this.db.Users.FirstOrDefault(u => u.Username == model.username);

            if (userInDb != null)
            {
                // USER EXISTS
                if (userInDb.IsLdap)
                {
                    try
                    {
                        // IS LDAP POWERED, IGNORE PASSWORD IN DB
                        using (var ws = WebServiceClient.Factory(model.GetDomain()))
                        {
                            // MAKE AUTH
                            var result = await ws.Login(model.GetUsername(), model.password);

                            if (result.Success)
                            {
                                // USER IS LEGAL
                                FormsAuthentication.SetAuthCookie(model.username, model.remember);

                                return RedirectToAction("Init");
                            }
                            else
                            {
                                // USER IS ILLEGAL
                                ModelState.AddModelError("", "Username or password invalid.");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        // AN ERROR OCCURED IN CREATION OF THE WebService
                        ErrorUtils.Send(ex);

                        ModelState.AddModelError("", ex.Message);
                    }
                }
                else
                {
                    // USER IS DB POWERED, CHECK THE PASSWORDS
                    var currentHash = userInDb.Password;

                    var isPasswordOkay = PasswordUtils.Validate(model.password, currentHash);
                    if (isPasswordOkay)
                    {
                        // USER PASSWORD IS LEGIT
                        FormsAuthentication.SetAuthCookie(model.username, model.remember);

                        return RedirectToAction("Init");
                    }
                    else
                    {
                        // BAD PASSWORD
                        ModelState.AddModelError("", "Username or password invalid.");
                    }
                }
            }
            else
            {
                try
                {
                    // USER DO NOT EXISTS IN DB
                    using (var ws = WebServiceClient.Factory(model.GetDomain()))
                    {
                        // MAKE AUTH
                        var result = await ws.Login(model.GetUsername(), model.password);

                        if (result.Success)
                        {
                            // USER IS LEGAL IN LDAP SO CREATE IT IN DB
                            var ldapUser = (AuthResponse.AuthResponseUser)result.User;

                            var name = ldapUser.DisplayName.Split(' ');
                            var user = new User()
                            {
                                Firstname = name[0],
                                Lastname = name[1],
                                ActivatedAt = DateTime.Now,
                                ModifiedAt = DateTime.Now,
                                Email = model.username,
                                IsLdap = true,
                                Username = model.username,
                                Password = "",
                                Notifications = NotificationType.All
                            };

                            // GET THE DEALER TO ADD IT TO THE USER RIGHT NOW
                            var dealer = this.db.BaseContexts.Find(ws.Dealer.Id);
                            user.BaseContexts.Add(dealer);
                            dealer.Users.Add(user);

                            try
                            {
                                this.db.Users.Add(user);

                                this.db.Entry(user).State = System.Data.Entity.EntityState.Added;
                                this.db.Entry(dealer).State = System.Data.Entity.EntityState.Modified;

                                await this.db.SaveChangesAsync();

                                FormsAuthentication.SetAuthCookie(model.username, model.remember);

                                return RedirectToAction("Init");
                            }
                            catch (Exception ex)
                            {
                                ErrorUtils.Send(ex);

                                ModelState.AddModelError("", "An error occured during user creation.");
                            }
                        }
                        else
                        {
                            // USER IS ILLEGAL
                            ModelState.AddModelError("", "Username or password invalid.");
                        }
                    }
                }
                catch (Exception ex)
                {
                    // AN ERROR OCCURED IN CREATION OF THE WebService
                    ErrorUtils.Send(ex);

                    ModelState.AddModelError("", ex.Message);
                }
            }
        }

        return View(model);
    }
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginModel模型)
{
if(ModelState.IsValid)
{
var userInDb=this.db.Users.FirstOrDefault(u=>u.Username==model.Username);
if(userInDb!=null)
{
//用户存在
if(userInDb.IsLdap)
{
尝试
{
//LDAP是否受支持,忽略数据库中的密码
使用(var ws=WebServiceClient.Factory(model.GetDomain()))
{
//授权
var result=wait ws.Login(model.GetUsername(),model.password);
如果(结果、成功)
{
//用户是合法的
FormsAuthentication.SetAuthCookie(model.username,model.memory);
返回重定向到操作(“初始化”);
}
其他的
{
//用户是非法的
AddModelError(“,”用户名或密码无效“);
}
}
}
捕获(例外情况除外)
{
//创建Web服务时出错
ErrorUtils.Send(ex);
ModelState.addmodeleror(“,例如Message”);
}
}
其他的
{
//用户已接通DB电源,请检查密码
var currentHash=userInDb.Password;
var ispasswordok=PasswordUtils.Validate(model.password,currentHash);
如果(isPasswordOK)
{
//用户密码是合法的
FormsAuthentication.SetAuthCookie(model.username,model.memory);
返回重定向到操作(“初始化”);
}
其他的
{
//密码错误
AddModelError(“,”用户名或密码无效“);
}
}
}
其他的
{
尝试
{
//数据库中不存在用户
使用(var ws=WebServiceClient.Factory(model.GetDomain()))
{
//授权
var result=wait ws.Login(model.GetUsername(),model.password);
如果(结果、成功)
{
//用户在LDAP中是合法的,所以在DB中创建它
var ldapUser=(AuthResponse.AuthResponseUser)result.User;
var name=ldapUser.DisplayName.Split(“”);
var user=新用户()
{
Firstname=名称[0],
Lastname=名称[1],
ActivatedAt=日期时间。现在,
ModifiedAt=DateTime。现在,
Email=model.username,
IsLdap=true,
用户名=model.Username,
密码=”,
通知=NotificationType.All
};
//让经销商立即将其添加到用户中
var-dealer=this.db.BaseContexts.Find(ws.dealer.Id);
user.BaseContexts.Add(经销商);
经销商.用户.添加(用户);
尝试
{
this.db.Users.Add(user);
this.db.Entry(user.State=System.Data.Entity.EntityState.Added;
this.db.Entry(dealer.State=System.Data.Entity.EntityState.Modified;
等待这个.db.saveChangesSync();
FormsAuthentication.SetAuthCookie(model.username,model.memory);
返回重定向到操作(“初始化”);
}
捕获(例外情况除外)
{
ErrorUtils.Send(ex);
AddModelError(“,”用户创建过程中发生错误。“);
}
}
其他的
{
//用户是非法的
AddModelError(“,”用户名或密码无效“);
}
}
}
捕获(例外情况除外)
{
//创建Web服务时出错
ErrorUtils.Send(ex);
ModelState.addmodeleror(“,例如Message”);
}
}
}
返回视图(模型);
}
我如何在这种情况下优化它或实现ASP.NET标识?我读过关于多租户的书,但我不确定是什么

我是