当前位置: 首页 > 知识库问答 >
问题:

控制器中的MVC身份验证

靳茂
2023-03-14

我们正在尝试做一些具有登录屏幕的网站。但是我们有一个问题。我们的域是本地主机/登录/用户。但是,如果用户进入localhost/Home/Index,他/她无需登录即可访问我们的主站点。因此,我们将 [授权] 写入索引控制器。但我不知道我必须使用什么。我是否必须在我们的项目中使用AuthorizeAttribute?

#Login Page
public class LoginController : Controller
{
     //GET: Login
    [IntranetAction]
    public ActionResult Users()
    {
        return View();
    }

    public ActionResult Authentication(UserLoginInfo loginInfo)
    {
        bool isAuthenticated = new LdapServiceManager().isAuthenticated(loginInfo);


        if (isAuthenticated)
        {
            //AUTHORIZED
            Session["userName"] = loginInfo.username;
            return Redirect("/Home/Index");
        }
        //WORNG PASSWORD, BACK TO LOGIN PAGE
        TempData["message"] = "Yanlış kullanıcı adı ya da şifre";
        return Redirect("/");
    }
}
[Authorize]
public ActionResult Index()
{
    Session["ip"] = Request.UserHostAddress;
    if (IsDbExists())
    {
        _contactList = new List<Contact>();
        UpdateOperations();
        return View(_contactList);
    }

    Response.Redirect("/Loading/LoadingScreen");
    return null;
}

如何访问LoginController/Authentication函数中的索引

共有1个答案

权兴为
2023-03-14

添加 [AllowAnonymous] 属性。我会添加另一个名为AuthController的控制器,它将具有[AllowAnonymous]属性,因此用户无需实际登录即可登录。

我通常会默认过滤所有控制器,并将[AllowAnnamous]属性添加到任何人都可以访问的控制器。

我用这个来解决这个问题。

using System.Web.Mvc;

namespace Test
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new AuthorizeAttribute());
        }
    }
}

AuthController中[AllowAnnamous]属性的示例。

using System.Security.Claims;
using System.Web;
using System.Web.Mvc;
using BusinessLogic.Services;
using Common.Models;
using Microsoft.AspNet.Identity;
using Microsoft.Owin.Security;

namespace Test.Controllers
{
    [AllowAnonymous]
    public class AuthController : Controller
    {
        private readonly IUsersService _usersService;

        public AuthController(IUsersService usersService)
        {
            _usersService = usersService;
        }

        [HttpGet]
        public ActionResult LogIn()
        {
            return View();
        }

        [HttpPost]
        public ActionResult LogIn(LoginModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return View();
            }

            var isValid = _usersService.AuthenticateUser(loginModel);
            if (isValid)
            {
                var identity = new ClaimsIdentity(new[]
                {
                    new Claim(ClaimTypes.NameIdentifier, loginModel.Username),
                    new Claim(ClaimTypes.Name, loginModel.Username),
                }, DefaultAuthenticationTypes.ApplicationCookie);

                Request.GetOwinContext().Authentication.SignIn(new AuthenticationProperties() { IsPersistent = false }, identity);

                return Redirect(GetRedirectUrl(loginModel.ReturnUrl));
            }

            ModelState.AddModelError("", "Invalid credentials");
            return View();
        }

        public ActionResult LogOut()
        {
            var ctx = Request.GetOwinContext();
            var authManager = ctx.Authentication;

            authManager.SignOut("ApplicationCookie");
            return RedirectToAction("index", "home");
        }

        private string GetRedirectUrl(string returnUrl)
        {
            if (string.IsNullOrEmpty(returnUrl) || !Url.IsLocalUrl(returnUrl))
            {
                return Url.Action("index", "home");
            }
            return returnUrl;
        }
    }



}

可能对你有帮助的参考资料:http://Ben foster . io/blog/aspnet-identity-stripped-bare-MVC-part-1

https://softwareengineering.stackexchange.com/questions/284380/is-formsauthentication-obsolete

ASP.NET MVC 中基于角色的访问控制 (RBAC) 与基于声明的访问控制 (CBAC)

https://www.owasp.org/index.php/.NET_Security_Cheat_Sheet

 类似资料:
  • 本文向大家介绍asp.net mvc中Forms身份验证身份验证流程,包括了asp.net mvc中Forms身份验证身份验证流程的使用技巧和注意事项,需要的朋友参考一下 验证流程 一、用户登录 1、验证表单:ModelState.IsValid 2、验证用户名和密码:通过查询数据库验证 3、如果用户名和密码正确,则在客户端保存Cookie以保存用户登录状态:SetAuthCookie     1

  • 我正在尝试为我的Spring MVC应用程序集成LDAP身份验证。如果我将contextSource设置为虚拟用户DN和相应的密码,则用户可以成功登录。我想做的是能够在不使用虚拟用户的情况下绑定ldap连接。 下面是工作原理的代码- 现在我已经尝试删除硬编码的userDn和密码(更新init())- 应用程序启动正常,但我遇到了一个例外——“必须在连接上成功绑定”。 Stacktrace- [UP

  • 我一直在尝试使用最新版本的SpringMVC实现来设置Swagger Spring-MVC和Swagger UI:Swagger Spring-MVC 我已经能够使初始设置正常工作,但当我导航到我的SwaggerUI页面时,我收到一个错误,它无法访问我的api,因为“服务器返回未定义”。当我查看firebug时,它说它得到了401授权。 当您第一次导航到SwaggerUI URL时,会弹出一个对话

  • 问题内容: 我有一个使用yeoman,grunt和bower创建的AngularJS应用程序。 我有一个登录页面,该页面具有用于检查身份验证的控制器。如果凭据正确,我将重新路由到主页。 app.js LoginControler.js 在主页上,我有 在中,检查登录信息,如果登录成功,则在服务工厂中设置用户对象。我不知道这是否正确。 我需要的是,当用户登录时,它会在用户对象中设置一些值,以便所有其

  • 我有一个使用yeoman、grunt和bower创建的AngularJS应用程序。 我有一个登录页面,它有一个检查身份验证的控制器。如果凭据是正确的,我重新路由到主页。 应用程序。js 登录ontroler.js 在我的主页上 在loginController中,我检查登录信息,如果成功,我在服务工厂中设置用户对象。我不知道这是否正确。 我需要的是,当用户登录时,它在user对象中设置一些值,以便

  • 问题内容: 我是AngularJS的新手,正在尝试为我的新Web应用程序对其进行评估。 需求: 我将有一个ASP.NET Web API,它将从Android,iPhone和Web应用程序(ASP.NET MVC)中使用。ASP.NET Identity将在Web API中实现。这三个应用程序都将调用Web API的login方法来获取auth令牌。 问题: 我的问题是当Angular进行调用以获