示例#1
0
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            // context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

            using (AuthManager _authManager = new AuthManager())
            {
                IdentityUser user = await _authManager.FindUser(context.UserName, context.Password);

                if (user == null)
                {
                    context.SetError("invalid_grant", "The user name or password is incorrect.");
                    return;
                }

                var identity = new ClaimsIdentity(context.Options.AuthenticationType);

                identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));

                // Get client info
                var clientManager = new ClientManager();

                var client = clientManager.GetClientByMail(user.UserName);
                if (client != null)
                {
                    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, client.Id.ToString()));
                    identity.AddClaim(new Claim(ClaimTypes.Email, client.Email));
                    identity.AddClaim(new Claim(ClaimTypes.Surname, $"{client.FirstName} {client.Surname}"));
                }

                identity.AddClaims(_authManager.GetUserRoles(user).Select(x => new Claim(ClaimTypes.Role, x)));

                context.Validated(identity);
            }
        }
示例#2
0
        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            //context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
            var  userRepository = new AuthManager();
            User user           = userRepository.FindUser(context.UserName, context.Password);

            if (user == null)
            {
                context.SetError("invalid_grant", "The user name or password is incorrect.");
                return;
            }

            var identity = new ClaimsIdentity(context.Options.AuthenticationType);

            identity.AddClaim(new Claim("sub", context.UserName));
            identity.AddClaim(new Claim("role", "user"));

            context.Validated(identity);
        }
        public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            if (actionContext.Request.Headers.Authorization == null)
            {
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
            }
            else
            {
                // Gets header parameters

                try
                {
                    string authenticationString = actionContext.Request.Headers.Authorization.Parameter;

                    string originalString = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationString));

                    // Gets username and password
                    string usrename = originalString.Split(':')[0];
                    string password = originalString.Split(':')[1];

                    var  userRepository = new AuthManager();
                    User user           = userRepository.FindUser(usrename, password);

                    // Validate username and password
                    if (user == null)
                    {
                        // returns unauthorized error
                        actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
                    }
                }
                catch (Exception)
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
                }
            }

            base.OnAuthorization(actionContext);
        }