protected override async Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            if (!Request.Headers.ContainsKey(AuthorizationHeaderName))
            {
                return(AuthenticateResult.NoResult());
            }

            if (!AuthenticationHeaderValue.TryParse(Request.Headers[AuthorizationHeaderName], out AuthenticationHeaderValue headerValue))
            {
                return(AuthenticateResult.NoResult());
            }

            if (!BasicSchemeName.Equals(headerValue.Scheme, StringComparison.OrdinalIgnoreCase))
            {
                return(AuthenticateResult.NoResult());
            }

            var headerValueBytes = Convert.FromBase64String(headerValue.Parameter);
            var userAndPassword  = Encoding.UTF8.GetString(headerValueBytes);
            var parts            = userAndPassword.Split(':');

            if (parts.Length != 2)
            {
                return(AuthenticateResult.Fail("Invalid Basic authentication header"));
            }

            var user     = parts[0];
            var password = parts[1];

            var users = await _httpProxy.GetCustomersAsync(CancellationToken.None);

            var search = users.Clients.FirstOrDefault(u => u.Name == user && u.Email == password);

            bool isValidUser = search != null;

            if (!isValidUser)
            {
                return(AuthenticateResult.Fail("Invalid username or password"));
            }

            var claims = new[]
            {
                new Claim(ClaimTypes.Name, search.Name),
                new Claim(ClaimTypes.Email, search.Email),
                new Claim(ClaimTypes.Role, search.Role)
            };

            var identity  = new ClaimsIdentity(claims, Scheme.Name);
            var principal = new ClaimsPrincipal(identity);
            var ticket    = new AuthenticationTicket(principal, Scheme.Name);

            return(AuthenticateResult.Success(ticket));
        }
Beispiel #2
0
        public async Task <IEnumerable <Policy> > GetPoliciesLinkedToCustomerByNameAsync(CustomerRequest request, CancellationToken cancellationToken)
        {
            var client = await _httpProxy.GetCustomersAsync(cancellationToken);

            var policies = await _httpProxy.GetPoliciesAsync(cancellationToken);

            var customerSelect = client.Clients.FirstOrDefault(customer => customer.Name == request.Name);

            if (customerSelect != null)
            {
                return(policies.Policies.Where(policy => policy.ClientId == customerSelect.Id).ToList());
            }

            return(null);
        }
        public async Task <Customer> GetCustomerByIdAsync(CustomerRequest request, CancellationToken cancellationToken)
        {
            var client = await _httpProxy.GetCustomersAsync(cancellationToken);

            return(client.Clients.FirstOrDefault(customer => customer.Id == request.Id));
        }