Skip to main content

Authentication in MVC

using System;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Optimization;
using System.Web.Security;
using System.Web.Script.Serialization;
using DynamicProject.Utility.Security;
using System.Configuration;

namespace DynamicProject.Web
{    
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            DynamicProject.Utility.Logging.Logger.Configure(Server.MapPath("~/Config/log4net.config"));
        }
              
        protected void WindowsAuthentication_OnAuthenticate(object sender, WindowsAuthenticationEventArgs e)
        {
            //Saving user data into form authentication cookie
             HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

             if (authCookie == null)
             {                
                 if (e.Identity != null && e.Identity.IsAuthenticated &&
                     (ConfigurationManager.AppSettings["DefaultToLoginPage"] != null &&
                      ConfigurationManager.AppSettings["DefaultToLoginPage"].ToString() == "false"))
                 {
                     string corpId = e.Identity.Name.ToString().ToUpper();
                     
                     if (corpId.Contains("\\"))
                         corpId = corpId.Substring((corpId.IndexOf('\\') + 1), 7).ToUpper();
                     
                     CustomPrincipalSerializeModel objCustomPrincipalSerializeModel = new UserSecurity().GetUserDetails(corpId);

                     if (objCustomPrincipalSerializeModel != null)
                     {
                         JavaScriptSerializer serializer = new JavaScriptSerializer();

                         string userData = serializer.Serialize(objCustomPrincipalSerializeModel);

                         FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, corpId, DateTime.Now, DateTime.Now.AddMinutes(15),
                                                                                              false, userData);

                         string encTicket = FormsAuthentication.Encrypt(authTicket);
                         HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
                         Response.Cookies.Add(faCookie);
                     }
                     else
                     {
                         //Not authorized user
                     }                     
                 }
             }
        }

        protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
        {
            //Retrieving  user data from authentication cookie
            HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

            if (authCookie != null)
            {
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                JavaScriptSerializer serializer = new JavaScriptSerializer();

                CustomPrincipalSerializeModel serializeModel = serializer.Deserialize<CustomPrincipalSerializeModel>(authTicket.UserData);

                CustomPrincipal newUser = new CustomPrincipal(authTicket.Name);
                newUser.Id = serializeModel.Id;
                newUser.FirstName = serializeModel.FirstName;
                newUser.LastName = serializeModel.LastName;
                newUser.Roles = serializeModel.Roles;
                newUser.CorpId = serializeModel.CorpId;
                newUser.FirstPriorityRole = serializeModel.FirstPriorityRole;

                HttpContext.Current.User = newUser;
            }
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Principal;

namespace DynamicProject.Utility.Security
{
    public class CustomPrincipal : ICustomPrincipal
    {
        public IIdentity Identity { get; private set; }        

        public CustomPrincipal(string corpId)
        {
            this.Identity = new GenericIdentity(corpId);
        }

        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string[] Roles { get; set; }
        public string FirstPriorityRole { get; set; }
        public string CorpId { get; set; }

        public string FullName
        {
            get
            {
                string fullName = string.Empty;

                if (!string.IsNullOrEmpty(FirstName))
                    fullName = FirstName;

                if (!string.IsNullOrEmpty(LastName))
                {
                    fullName += fullName == string.Empty ? LastName : " " + LastName;
                }
                return fullName;
                //return FirstName + " " + LastName; 
            }
        }
        public bool IsInRole(string role)
        {
            return Roles.Contains(role) ? true : false;
        }

        public bool IsAdmin
        {
            get { return FirstPriorityRole == "ADM" ? true : false; }
        }

        public bool IsUser
        {
            get { return FirstPriorityRole == "USR" ? true : false; }
        }

        public bool IsQualityCheckAdmin
        {
            get { return FirstPriorityRole == "QCA" ? true : false; }
        }

        public int RoleCount
        {
            get { return Roles.Length; }
        }       
    }
}



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DynamicProject.Utility.Security
{
    public class CustomPrincipalSerializeModel
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string[] Roles { get; set; }
        public string FullName
        {

            get
            {
                string fullName = string.Empty;

                if (!string.IsNullOrEmpty(FirstName))
                    fullName = FirstName;

                if (!string.IsNullOrEmpty(LastName))
                {
                    fullName += fullName == string.Empty ? LastName : " " + LastName;
                }
                return fullName;
                //return FirstName + " " + LastName; 
            }
        }
        public string CorpId { get; set; }
        public string FirstPriorityRole
        {
            get;
            set;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Principal;

namespace DynamicProject.Utility.Security
{
    public interface ICustomPrincipal : IPrincipal
    {
        int Id { get; set; }
        string FirstName { get; set; }
        string LastName { get; set; }
        string[] Roles { get; set; }
        string FullName { get; }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DynamicProject.DAL;
using DynamicProject.DTO;

namespace DynamicProject.Utility.Security
{
    public class UserSecurity
    {
        public CustomPrincipalSerializeModel GetUserDetails(string corpId)
        {
            if (corpId != null)
            {
                UserRepository objUserRepository = new UserRepository();

                CustomPrincipalSerializeModel objCustomPrincipalSerializeModel = new CustomPrincipalSerializeModel();
                User objUser = objUserRepository.GetUserDetails(corpId, true);
                List<Role> lstRole = objUserRepository.GetRoleList();
                List<Role> lstFilteredRole = new List<Role>();

                if (objUser != null)
                {
                    objUser.UserRoles = objUser.UserRoles.Where(F => F.IsActive == "Y").ToList();

                    if (objUser.UserRoles != null && objUser.UserRoles.Count > 0)
                    {                        


                        objCustomPrincipalSerializeModel.CorpId = objUser.CorpId;
                        objCustomPrincipalSerializeModel.Id = objUser.UserRoles.Count;
                        objCustomPrincipalSerializeModel.FirstName = objUser.UserRoles[0].Users.FirstName;
                        objCustomPrincipalSerializeModel.LastName = objUser.UserRoles[0].Users.LastName;
                        
                        string[] roles = new string[objUser.UserRoles.Count];
                        for (int roleCount = 0; roleCount < objUser.UserRoles.Count; roleCount++)
                            roles[roleCount] = objUser.UserRoles[roleCount].RoleCode;

                        objCustomPrincipalSerializeModel.Roles = roles;

                        foreach (string role in roles)
                        {
                            var objRole = lstRole.Where(F => F.RoleCode.ToUpper() == role.ToUpper()).FirstOrDefault<Role>();
                            lstFilteredRole.Add(objRole);
                        }

                        lstFilteredRole = lstFilteredRole.OrderBy(F => F.PriorityNumber).ToList();
                        objCustomPrincipalSerializeModel.FirstPriorityRole = lstFilteredRole[0].RoleCode;
                        return objCustomPrincipalSerializeModel;
                    }
                    
                }
            }
            return null;
        }
    }
}


Comments

Popular posts from this blog

Difference between NPM and NPX

NPM Vs NPX npm  - Javascript package manager npx  - Execute npm package binaries https://docs.npmjs.com/files/folders#executables If you use  npm 5.1 or earlier , you can't use npx. Instead, install create-react-app globally: npm install -g create-react-app Now you can run: create-react-app my-app NPM: One might install a package locally on a certain project: npm install some - package Now let's say you want NodeJS to execute that package from the command line: $ some - package The above will  fail . Only  globally installed  packages can be executed by typing their name  only . To fix this, and have it run, you must type the local path: $ ./ node_modules /. bin / some - package You can technically run a locally installed package by editing your  packages.json  file and adding that package in the  scripts  section: { "name" : "whatever" , "version" : "1.0.0" , "scripts" : { ...

Books To Refer

1. C#   in Depth ,  Third   Edition : Foreword   by Eric   Lippert        By:  Jon Skeet    Publication Date:  16-SEP-2013 2. Learning jQuery - Fourth Edition     B y:  Jonathan Chaffer; Karl Swedberg     Pub. Date:  June 25, 2013      3.Beginning JSON                    By:  Ben Smith     Publication Date:  04-MAR-2014 4. Responsive Web Design with jQuery     By:  Gilberto Crespo      Pub. Date:  November 25, 2013 5. Developing Responsive Web Applications with AJAX and jQuery       By:  Sandeep Kumar Patel  P ub. Date:  July 25, 2014 6. Dependency Injection in .NET     by  Mark Seemann

Create ASP.NET Core React-Redux Without Template

Node JS Visual Studio Code NET Core SDK (I’m using SDK version 2.2) Omni Sharp C# extension mkdir DotnetReactRedux cd DotnetReactRedux dotnet new mvc Code . npm init If you didn’t already install Webpack globally run below: npm install webpack -g npm install webpack-cli -g Then run below to add Webpack to your project npm i webpack –-save-dev npm i webpack-cli --save-dev open package.json file and add below { "name": "myapp", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "build": "webpack", "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "webpack": "^4.20.2", "webpack-cli": ...