예제 #1
0
        public void LoadUserAuth_By_Name()
        {
            // Arrange
            var userAuth = Sut.CreateUserAuth(NewUserAuth, Password);

            var authSession = new AuthUserSession
            {
                UserAuthName = userAuth.UserName
            };

            var tokens = new AuthTokens();

            // Act
            Sut.LoadUserAuth(authSession, tokens);

            // Assert
            authSession.UserName.Should().Be(userAuth.UserName);
        }
예제 #2
0
        public Session GetValidSession(Guid sessionId)
        {
            if (sessionId == default(Guid))
            {
                throw new UnauthorizedException("Se requiere Identificador de Sesion");
            }

            Session authSession = AuthUserSession[sessionId];

            if (authSession != default(Session))
            {
                Console.WriteLine("ServiceAuthProvider sessionId {0}", authSession.Id);
                AuthUserSession.Refresh(authSession);
                return(authSession);
            }

            throw new UnauthorizedException("No Existe Sesion con Id: " + sessionId);
        }
예제 #3
0
        public void Should_SaveUserAuth()
        {
            // Arrange
            var userAuth = Sut.CreateUserAuth(NewUserAuth, Password);

            var authUserSession = new AuthUserSession
            {
                UserAuthId = userAuth.Id.ToString()
            };

            // Act
            Sut.SaveUserAuth(authUserSession);

            // Assert
            var updatedUserAuth = Sut.GetUserAuth(userAuth.Id.ToString());

            updatedUserAuth.ModifiedDate.Should().BeAfter(userAuth.ModifiedDate);
        }
        protected override void LoadUserAuthInfo(AuthUserSession userSession, IAuthTokens tokens, Dictionary <string, string> authInfo)
        {
            var idAuthTokens = tokens as IdentityServerAuthTokens;

            if (!string.IsNullOrWhiteSpace(idAuthTokens?.IdToken))
            {
#if NETSTANDARD1_6
                var jwtToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(idAuthTokens.IdToken);
#elif NET45
                var jwtToken = new System.IdentityModel.Tokens.JwtSecurityToken(idAuthTokens.IdToken);
#endif
                idAuthTokens.Issuer  = jwtToken.Issuer;
                idAuthTokens.Subject = jwtToken.Subject;

                foreach (var claim in jwtToken.Claims)
                {
                    switch (claim.Type)
                    {
                    case JwtClaimTypes.Expiration:
                        idAuthTokens.Expiration = claim.Value;
                        break;

                    case JwtClaimTypes.Audience:
                        idAuthTokens.Audience = claim.Value;
                        break;

                    case JwtClaimTypes.IssuedAt:
                        idAuthTokens.IssuedAt = claim.Value;
                        break;

                    case JwtClaimTypes.AuthenticationTime:
                        idAuthTokens.AuthenticationTime = claim.Value;
                        break;

                    case JwtClaimTypes.Nonce:
                        idAuthTokens.Nonce = claim.Value;
                        break;
                    }
                }
            }

            base.LoadUserAuthInfo(userSession, tokens, authInfo);
        }
예제 #5
0
        public static RegisterService GetRegistrationService(
            IUserAuthRepository userAuthRepository,
            AuthUserSession oAuthUserSession = null,
            BasicRequest request             = null)
        {
            if (request == null)
            {
                request = new BasicRequest();
            }
            if (oAuthUserSession == null)
            {
                oAuthUserSession = request.ReloadSession();
            }

            oAuthUserSession.Id = request.Response.CreateSessionId(request);
            request.Items[SessionFeature.RequestItemsSessionKey] = oAuthUserSession;

            var mockAppHost = new BasicAppHost();

            mockAppHost.Container.Register <IAuthRepository>(userAuthRepository);

            var authService = new AuthenticateService
            {
                Request = request,
            };

            authService.SetResolver(mockAppHost);
            mockAppHost.Register(authService);

            var registrationService = new RegisterService
            {
                AuthRepo = userAuthRepository,
                Request  = request,
                RegistrationValidator =
                    new RegistrationValidator {
                    UserAuthRepo = RegistrationServiceTests.GetStubRepo()
                },
            };

            registrationService.SetResolver(mockAppHost);

            return(registrationService);
        }
        public void ShouldAbortIfStateValuesDoNotMatch()
        {
            // var appHost = TestServer.Current;
            var subject = new AzureAuthenticationProvider(new TestAzureGraphService());
            var auth    = new Authenticate
            {
                UserName = "******"
            };

            subject.CallbackUrl = "http://localhost/myapp/";
            var request = new MockHttpRequest("myapp", "GET", "text", "/myapp", new NameValueCollection
            {
                { "code", "code123" },
                { "session_state", "dontcare" },
                { "state", "state123" }
            }, Stream.Null, new NameValueCollection());
            var mockAuthService = MockAuthService(request);

            using (new HttpResultsFilter
            {
                StringResultFn = (tokenRequest, s) => @"{
                          ""access_token"": ""fake token"",
                          ""id_token"": ""eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ.""
                        }"
            })
            {
                var session = new AuthUserSession
                {
                    State = "state133" // Not the same as the state in the request above
                };

                try
                {
                    subject.Authenticate(mockAuthService.Object, session, auth);
                }
                catch (UnauthorizedAccessException)
                {
                }

                Assert.False(session.IsAuthenticated);
            }
        }
예제 #7
0
        public void LoadUserAuth_By_Token()
        {
            // Arrange
            var userAuth = Sut.CreateUserAuth(NewUserAuth, Password);

            CreateUserAuthDetails(userAuth, "google");

            var authSession = new AuthUserSession();

            var tokens = new AuthTokens
            {
                UserId   = userAuth.Id.ToString(),
                Provider = "google"
            };

            // Act
            Sut.LoadUserAuth(authSession, tokens);

            // Assert
            authSession.UserName.Should().Be(userAuth.UserName);
        }
예제 #8
0
        public void ShouldNotAttemptAuthenticationAgainstUnRegisteredDirectory()
        {
            using (AadAuthProviderTest.TestAppHost())
            {
                var request = new MockHttpRequest("myapp", "GET", "text", "/myapp", new NameValueCollection
                {
                    { "redirect", "http://localhost/myapp/secure-resource" }
                }, Stream.Null, null);
                var mockAuthService = MockAuthService(_directoryRepository, request);
                var session         = new AuthUserSession();

                var username  = "******";
                var exception = Assert.Throws <UnauthorizedAccessException>(() => Subject.Authenticate(mockAuthService.Object, session, new Authenticate()
                {
                    UserName = username,
                    provider = AadMultiTenantAuthProvider.Name
                }));

                Assert.AreEqual($"Directory not found: @notregistered.com", exception.Message);
            }
        }
예제 #9
0
        public Session CreateSession(LoginData userData, string ipAddress, string userAgent)
        {
            var response = Validate(userData);

            if (response == default(Usuario))
            {
                throw new UnauthenticatedException("Usuario No Autenticado");
            }

            if (!response.Activo)
            {
                throw new UnauthenticatedException("Usuario se encuentra inactivo");
            }

            return(AuthUserSession.Add(
                       new UserBase()
            {
                Name = response.Nombre,
                UserId = response.Id.ToString()
            },
                       ipAddress, userAgent));
        }
        protected override Task LoadUserAuthInfoAsync(AuthUserSession userSession, IAuthTokens tokens, Dictionary <string, string> authInfo, CancellationToken token = default)
        {
            tokens.Gender = authInfo["gender"];
            if (tokens.Gender != "none")
            {
                userSession.Gender = tokens.Gender;
            }

            if (authInfo.ContainsKey("phone"))
            {
                tokens.PhoneNumber = authInfo["phone"];
            }
            userSession.PhoneNumber = tokens.PhoneNumber ?? userSession.PhoneNumber;

            if (authInfo.ContainsKey("birthday"))
            {
                tokens.BirthDateRaw = authInfo["birthday"];

                if (long.TryParse(tokens.BirthDateRaw, out var unixDateTime))
                {
                    tokens.BirthDate = unixDateTime.FromUnixTime();
                }
            }
            userSession.BirthDateRaw = tokens.BirthDateRaw ?? userSession.BirthDateRaw;
            userSession.BirthDate    = tokens.BirthDate ?? userSession.BirthDate;

            if (authInfo.ContainsKey("facebook"))
            {
                userSession.FacebookUserId = authInfo["facebook"];
            }

            if (authInfo.ContainsKey("twitter"))
            {
                userSession.TwitterUserId = authInfo["twitter"];
            }

            userSession.UserAuthName = tokens.Email;
            return(TypeConstants.EmptyTask);
        }
예제 #11
0
        public void LoadUserAuthInfo(AuthUserSession userSession, IAuthTokens tokens, Dictionary <string, string> authInfo)
        {
            if (userSession == null)
            {
                return;
            }
#if !MONO
            try
            {
                using var pc = new PrincipalContext(ContextType.Domain);
                var user = UserPrincipal.FindByIdentity(pc, userSession.UserAuthName);
                if (user == null)
                {
                    return;
                }

                tokens.DisplayName = user.DisplayName;
                tokens.Email       = user.EmailAddress;
                tokens.FirstName   = user.GivenName;
                tokens.LastName    = user.Surname;
                tokens.FullName    = (string.IsNullOrWhiteSpace(user.MiddleName))
                    ? $"{user.GivenName} {user.Surname}"
                    : $"{user.GivenName} {user.MiddleName} {user.Surname}";
                tokens.PhoneNumber       = user.VoiceTelephoneNumber;
                userSession.UserAuthName = tokens.Email ?? tokens.UserName;
            }
            catch (MultipleMatchesException mmex)
            {
                Log.Error("Multiple windows user info for '{0}'".Fmt(userSession.UserAuthName), mmex);
            }
            catch (Exception ex)
            {
                Log.Error("Could not retrieve windows user info for '{0}'".Fmt(tokens.DisplayName), ex);
            }
#endif
        }
예제 #12
0
        public void CreateOrMergeAuthSession_Update()
        {
            // Arrange
            var userAuth        = Sut.CreateUserAuth(NewUserAuth, Password);
            var userAuthDetails = CreateUserAuthDetails(userAuth, "google");

            var authSession = new AuthUserSession();

            var tokens = new AuthTokens
            {
                UserId   = userAuth.Id.ToString(),
                Provider = "google",
                City     = userAuthDetails.City
            };

            // Act
            var result = Sut.CreateOrMergeAuthSession(authSession, tokens);

            // Assert
            result.Id.Should().BeGreaterThan(0);
            result.Id.Should().Be(result.UserAuthId);
            result.ModifiedDate.Should().BeAfter(userAuth.ModifiedDate);
            result.City.Should().Be(userAuthDetails.City);
        }
예제 #13
0
        public void LoadUserAuthInfo(AuthUserSession userSession, IAuthTokens tokens, Dictionary<string, string> authInfo)
        {
            if (userSession == null)
                return;

            using (var pc = new PrincipalContext(ContextType.Domain))
            {
                var user = UserPrincipal.FindByIdentity(pc, userSession.UserAuthName);

                tokens.DisplayName = user.DisplayName;
                tokens.Email = user.EmailAddress;
                tokens.FirstName = user.GivenName;
                tokens.LastName = user.Surname;
                tokens.FullName = string.IsNullOrWhiteSpace(user.MiddleName)
                    ? "{0} {1}".Fmt(user.GivenName, user.Surname)
                    : "{0} {1} {2}".Fmt(user.GivenName, user.MiddleName, user.Surname);
                tokens.PhoneNumber = user.VoiceTelephoneNumber;
            }
        }