示例#1
0
        public async Task <IActionResult> Login([FromBody] LoginUserCommand command)
        {
            var result = _handler.Handle(command);

            if (result.Success == true)
            {
                var userClaimsList = (List <string>)result.Data;
                var user           = _repository.GetByLogin(command.UserName);
                var token          = new JwtGenerator(_appSettings).GenerateToken(result, userClaimsList);
                var tokenResult    = new TokenResult()
                {
                    Token = token, LoggedSuccessful = true, UserName = user.Name.ToString(), UserEmail = user.Email.EmailAddress, UserId = user.Id.ToString()
                };
                return(await Response(new BaseCommandResult(true, "Logged with Success.", tokenResult))); //Do Not need to Jsonfy it, so I'll return the Own Result
            }
            return(await Response(new BaseCommandResult(false, "Username or Password invalid.", null)));  //Do Not need to Jsonfy it, so I'll return the Own Result
        }
示例#2
0
        public async Task <IActionResult> SecureLogin(LoginModel model)
        {
            var user = await _userManager.FindByNameAsync(model.Username);

            if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
            {
                var role = await _userManager.GetRolesAsync(user);

                var crypto            = new VirgilCrypto();
                var appKey            = crypto.ImportPrivateKey(Bytes.FromString(_appsettings.APPKEYBASE64, StringEncoding.BASE64), _appsettings.APP_KEY_PASSWORD.ToString());
                var accessTokenSigner = new VirgilAccessTokenSigner();
                var jwtGenerator      = new JwtGenerator(_appsettings.APP_ID, appKey, _appsettings.APP_KEY_ID, TimeSpan.FromMinutes(5), accessTokenSigner);
                var token             = jwtGenerator.GenerateToken(user.Id).ToString() + jwtGenerator.GenerateToken(user.UserName).ToString() + jwtGenerator.GenerateToken(role.FirstOrDefault()).ToString();
                return(Ok(new { token }));
            }
            return(BadRequest(new { message = "Username or Password is Incorrect" }));
        }
示例#3
0
 public GenerateAuthorizationResponse(
     IAuthorizationCodeStore authorizationCodeStore,
     ITokenStore tokenStore,
     IScopeRepository scopeRepository,
     IClientStore clientStore,
     IConsentRepository consentRepository,
     IJwksStore jwksStore,
     IEventPublisher eventPublisher,
     ILogger logger)
 {
     _authorizationCodeStore = authorizationCodeStore;
     _tokenStore             = tokenStore;
     _jwtGenerator           = new JwtGenerator(clientStore, scopeRepository, jwksStore, logger);
     _eventPublisher         = eventPublisher;
     _clientStore            = clientStore;
     _consentRepository      = consentRepository;
     _jwksStore = jwksStore;
 }
        public void IssuedToken_WithInvalidValues_FailsValidation()
        {
            using (var variables = new TestScopedEnvironmentVariable(Constants.AzureWebsiteLocalEncryptionKey, TestKeyValue))
            {
                var token = JwtGenerator.GenerateToken("testissuer", "testaudience");

                var testParameters = new TokenValidationParameters()
                {
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(TestKeyValue)),
                    ValidateIssuer   = true,
                    ValidateAudience = true
                };

                bool result = JwtGenerator.IsTokenValid(token, testParameters);

                Assert.False(result);
            }
        }
示例#5
0
        public async Task <ActionResult <User> > Login([FromBody] AuthModel model)
        {
            if (ModelState.IsValid)
            {
                var result =
                    await _signInManager.PasswordSignInAsync(model.Login, model.Password, false, false);

                if (result.Succeeded)
                {
                    return(Ok(JwtGenerator.GenerateJwt(await _userManager.FindByNameAsync(model.Login))));
                }
                else
                {
                    ModelState.AddModelError("", "Неправильный логин и (или) пароль");
                }
            }
            return(BadRequest(ModelState));
        }
示例#6
0
 public IActionResult ResetPassword(Login login)
 {
     try
     {
         User   user  = Authentification.UserLink(login.Username);
         string token = JwtGenerator.GenerateJSONWebToken(user.Id);
         Response.Headers.Add("Token", token);
         Uri    domain = new Uri(Request.GetDisplayUrl());
         Uri    uri    = new Uri(domain.Scheme + "://" + domain.Host + (domain.IsDefaultPort ? "" : ":" + domain.Port));
         string url    = uri.ToString();
         EmailManager.SendEmail(user, token, url);
         return(Ok());
     }
     catch
     {
         return(BadRequest());
     }
 }
        public async Task <AuthenticatedUser> SignIn(User user)
        {
            var dbUser = await _context.Users
                         .FirstOrDefaultAsync(u => u.Email == user.Email);

            if (dbUser == null || _passwordHasher.VerifyHashedPassword(dbUser.Password, user.Password) == PasswordVerificationResult.Failed)
            {
                throw new InvalidEmailPasswordException("Invalid Username or Password");
            }

            return(new AuthenticatedUser
            {
                Token = JwtGenerator.GenerateUserToken(user.Email),
                Email = user.Email,
                Password = user.Password,
                Name = dbUser.Name
            });
        }
示例#8
0
        /// <summary>
        /// logging into a user's account
        /// </summary>
        /// <param name="user"></param>
        /// <returns> user's username, JWT token, their ID </returns>
        public async Task <AuthenticatedUser> SignIn(Strength.DB.User user)
        {
            // finding user in the database
            var dbUser = await _context.Users
                         .FirstOrDefaultAsync(u => u.Email == user.Email);

            // checking if user was found and if given password matches password in the database
            if (dbUser == null || _passwordHasher.VerifyHashedPassword(dbUser.Password, user.Password) == PasswordVerificationResult.Failed)
            {
                throw new InvalidUsernamePasswordException("Invalid username or password");
            }

            return(new AuthenticatedUser
            {
                Username = dbUser.Username,
                Token = JwtGenerator.GenerateUserToken(dbUser.Username),
                Id = dbUser.Id
            });
        }
        public void GeneratedToken_ContainsExpectedClaims()
        {
            using (var variables = new TestScopedEnvironmentVariable(Constants.AzureWebsiteLocalEncryptionKey, TestKeyValue))
            {
                var issuer     = "testissuer";
                var audience   = "testaudience";
                var expiration = new DateTime(2017, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                var notBefore  = expiration.AddSeconds(-10);

                var token = JwtGenerator.GenerateToken(issuer, audience, notBefore, expiration);

                var jwt = new JwtSecurityToken(token);

                Assert.Equal(issuer, jwt.Issuer);
                Assert.Equal(audience, jwt.Audiences.First());
                Assert.Equal(expiration, jwt.ValidTo);
                Assert.Equal(notBefore, jwt.ValidFrom);
            }
        }
示例#10
0
 public void Setup()
 {
     _configuration = new JwtConfiguration
     {
         TokenKey = "qwertzuiopaasdfghjklxcvbnm",
         Audience = "audience",
         Issuer   = "issuer",
         AccessTokenExpiryInMinutes = 60
     };
     _userManager         = new FakeUserManager();
     _httpContextAccessor = Substitute.For <IHttpContextAccessor>();
     _arpaContext         = Substitute.For <IArpaContext>();
     _jwtGenerator        = new JwtGenerator(
         _configuration,
         _userManager,
         _arpaContext,
         _httpContextAccessor,
         new FakeDateTimeProvider());
 }
示例#11
0
        public void TestSingleAcl()
        {
            var expected = @"{""paths"":{""/*/users/**"":{}}}";
            var acls     = new Acls
            {
                Paths = new List <AclPath>
                {
                    new AclPath
                    {
                        ApiVersion = "*", ResourceType = "users", Resource = "**", AccessLevels = new object()
                    }
                }
            };
            var generator = new JwtGenerator(_mockAppId, _mockPKCS1, acls);
            var jwt       = generator.GenerateJwt();
            var decoded   = JsonConvert.DeserializeObject <JObject>(generator.DecodeJwt(jwt));

            Assert.Equal(_mockAppId, decoded["application_id"].ToString());
            Assert.Equal(expected, Regex.Replace(decoded["acls"].ToString(), @"\s+", ""));
        }
示例#12
0
        static AuthenticationService()
        {
            NewtonsoftJsonSerializer njs = new NewtonsoftJsonSerializer();
            var config = njs.Deserialize <Config>(File.ReadAllText(@"appsettings.json"));

            var apiKeyBase64   = config.API_KEY;
            var privateKeyData = Bytes.FromString(apiKeyBase64, StringEncoding.BASE64);

            var crypto = new VirgilCrypto();
            var apiKey = crypto.ImportPrivateKey(privateKeyData);

            var accessTokenSigner = new VirgilAccessTokenSigner();

            var appId    = config.APP_ID;
            var apiKeyId = config.API_KEY_ID;
            var ttl      = TimeSpan.FromHours(1); // 1 hour (JWT's lifetime)

            _jwtGenerator = new JwtGenerator(appId, apiKey, apiKeyId, ttl, accessTokenSigner);
            _authTokens   = new Dictionary <string, string>();
        }
        public async Task <IActionResult> Login(LoginModel model)
        {
            var user = await _userManager.FindByNameAsync(model.Username);

            if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
            {
                var role = await _userManager.GetRolesAsync(user);

                IdentityOptions _options        = new IdentityOptions();
                var             tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject = new ClaimsIdentity(new Claim[]
                    {
                        new Claim("UserID", user.Id.ToString()),
                        new Claim("Username", user.UserName.ToString()),
                        new Claim(_options.ClaimsIdentity.RoleClaimType, role.FirstOrDefault())
                    }),
                    Expires            = DateTime.UtcNow.AddMinutes(5),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_appsettings.JWT_Secret)), SecurityAlgorithms.HmacSha256Signature)
                };
                var tokenHandler  = new JwtSecurityTokenHandler();
                var securityToken = tokenHandler.CreateToken(tokenDescriptor);
                var token         = tokenHandler.WriteToken(securityToken);

                var SecureRole = await _userManager.GetRolesAsync(user);

                var crypto            = new VirgilCrypto();
                var appKey            = crypto.ImportPrivateKey(Bytes.FromString(_appsettings.APPKEYBASE64, StringEncoding.BASE64), _appsettings.APP_KEY_PASSWORD.ToString());
                var accessTokenSigner = new VirgilAccessTokenSigner();
                var jwtGenerator      = new JwtGenerator(_appsettings.APP_ID, appKey, _appsettings.APP_KEY_ID, TimeSpan.FromMinutes(5), accessTokenSigner);
                var SecureToken       = jwtGenerator.GenerateToken(user.Id).ToString() + jwtGenerator.GenerateToken(user.UserName).ToString() + jwtGenerator.GenerateToken(role.FirstOrDefault()).ToString();



                return(Ok(new { token, SecureToken, user.Id, user.UserName, user.Email }));
            }
            else
            {
                return(BadRequest(new { message = "Username or Password is Incorrect" }));
            }
        }
示例#14
0
        public string ChangeUsername(string username)
        {
            // finding user in the database
            var dbUser = _context.Users
                .FirstOrDefault(u => u.Id == _user.Id);

            // checking if user was found and verifying his password
            if (dbUser == null)
            {
                throw new DoesNotMatchIdException("User not found");
            }

            if (_context.Users.Any(u => u.Username == username)){
                throw new UsernameAlreadyExistsException("This username is taken. Try another one.");
            }

            dbUser.Username = username;

            _context.SaveChanges();
            return JwtGenerator.GenerateUserToken(username);
        }
示例#15
0
        public IActionResult Login([FromBody] LoginModel login)
        {
            if (!this._userService.Verify(login.Account, login.Password))
            {
                return(Unauthorized());
            }

            var claims = new List <Claim>
            {
                new Claim("rol", "Admin"),
                new Claim("nam", login.Account)
            };
            var token = JwtGenerator.GeneratorToken(_config["Jwt:Issuer"], _config["Jwt:Issuer"], _config["Jwt:Key"],
                                                    SecurityAlgorithms.HmacSha256, claims, 30);

            return(Ok(
                       new
            {
                token = token
            }));
        }
示例#16
0
        private string CreateClientAssertion()
        {
            var tokenEndpoint = _settings.Authority + "connect/token";

            var certificate = CertificateStore.GetCertificateByThumbprint(_settings.Thumbprint);

            var securityKey = new X509SecurityKey(certificate);
            var extraClaims = new Dictionary <string, string>();

            extraClaims.Add("helseid://client/claims/orgnr_child_description", "a child description");

            var assertion = JwtGenerator.Generate(
                _settings.ClientIdActorClient,
                tokenEndpoint,
                extraClaims,
                new TimeSpan(0, 1, 0),
                JwtGenerator.SigningMethod.X509EnterpriseSecurityKey,
                securityKey,
                SecurityAlgorithms.RsaSha512);

            return(assertion);
        }
示例#17
0
        private IActionResult ProcessPayload(JwtPayload payload)
        {
            // generate token
            String token = JwtGenerator.GetToken(payload, Config.Authorization.Secret, Config.Authorization.ExpirationShift);

            if (String.IsNullOrWhiteSpace(token))
            {
                LoggerBundle.Warn("JWT token generation failed: empty token");
                return(StatusCode((Int32)HttpStatusCode.InternalServerError));
            }

            return(Ok(new Dictionary <String, String>
            {
                {
                    "token", token
                }
                ,
                {
                    "expires", payload.Exp.ToString(CultureInfo.InvariantCulture)
                }
            }));
        }
        public async Task <AuthenticatedUser> SignUp(User user)
        {
            var checkUser = await _context.Users
                            .FirstOrDefaultAsync(u => u.Email.Equals(user.Email));

            if (checkUser != null)
            {
                throw new EmailAlreadyExistsException("Email Already Exists");
            }

            user.Password = _passwordHasher.HashPassword(user.Password);
            await _context.AddAsync(user);

            await _context.SaveChangesAsync();

            return(new AuthenticatedUser
            {
                Token = JwtGenerator.GenerateUserToken(user.Email),
                Email = user.Email,
                Password = user.Password,
                Name = user.Name
            });
        }
        public async Task <ActionResult <string> > Entrar([FromBody] LoginUserViewModel loginVM)
        {
            if (!ModelState.IsValid)
            {
                return(CustomResponse(ModelState));
            }

            var result = await _signInManager.PasswordSignInAsync(loginVM.Email, loginVM.Password, false, true);

            if (result.Succeeded)
            {
                LoginResponseViewModel token = await JwtGenerator.GerarToken(loginVM.Email, _appSettings, _userManager);

                return(CustomResponse(token));
            }

            if (result.IsLockedOut)
            {
                return(CustomErrorResponse("Usuário temporiariamente bloqueado por ter feito várias tentativas de entrada inválidas!"));
            }

            return(CustomErrorResponse("Usuário ou senha incorretos! Tente novamente."));
        }
        public static Task <string> EmulateServerResponseToBuildTokenRequest(TokenContext tokenContext, double lifeTimeMin = 10)
        {
            var serverResponse = Task <string> .Factory.StartNew(() =>
            {
                Thread.Sleep(1000);     // simulation of long-term processing
                var data = new Dictionary <object, object>
                {
                    { "username", "my_username" }
                };
                var builder = new JwtGenerator(
                    AppSettings.AppId,
                    ApiPrivateKey(),
                    AppSettings.ApiPublicKeyId,
                    TimeSpan.FromMinutes(lifeTimeMin),
                    new VirgilAccessTokenSigner()
                    );
                var identity = SomeHash(tokenContext.Identity);
                return(builder.GenerateToken(identity, data).ToString());
            }
                                                                 );

            return(serverResponse);
        }
示例#21
0
 public UmaTokenActions(
     ITicketStore ticketStore,
     RuntimeSettings configurationService,
     IClientStore clientStore,
     IScopeStore scopeRepository,
     ITokenStore tokenStore,
     IResourceSetRepository resourceSetRepository,
     IJwksStore jwksStore,
     IEventPublisher eventPublisher,
     ILogger logger)
 {
     _ticketStore                  = ticketStore;
     _configurationService         = configurationService;
     _authorizationPolicyValidator = new AuthorizationPolicyValidator(
         jwksStore,
         resourceSetRepository,
         eventPublisher);
     _authenticateClient = new AuthenticateClient(clientStore, jwksStore);
     _jwtGenerator       = new JwtGenerator(clientStore, scopeRepository, jwksStore, logger);
     _tokenStore         = tokenStore;
     _eventPublisher     = eventPublisher;
     _logger             = logger;
 }
        public async System.Threading.Tasks.Task Prepair_TestDataAsync()
        {
            var model     = faker.PredefinedRawSignedModel();
            var fullModel = faker.PredefinedRawSignedModel(
                "a666318071274adb738af3f67b8c7ec29d954de2cabfd71a942e6ea38e59fff9",
                true, true, true);
            var data = new Dictionary <string, string>
            {
                { "STC-1.as_string", model.ExportAsString() },
                { "STC-1.as_json", model.ExportAsJson() },
                { "STC-2.as_string", fullModel.ExportAsString() },
                { "STC-2.as_json", fullModel.ExportAsJson() }
            };

            var cardManager = faker.CardManager();
            var card        = cardManager.ImportCardFromString(model.ExportAsString());
            var crypto      = new VirgilCrypto();

            data.Add("STC-3.as_string", cardManager.ExportCardAsString(card));
            data.Add("STC-3.as_json", cardManager.ExportCardAsJson(card));
            data.Add("STC-3.card_id", card.Id);
            data.Add("STC-3.public_key_base64", Bytes.ToString(crypto.ExportPublicKey(card.PublicKey), StringEncoding.BASE64));

            fullModel = faker.PredefinedRawSignedModel(null, true, true, true);
            var fullCard = cardManager.ImportCardFromString(fullModel.ExportAsString());

            data.Add("STC-4.as_string", cardManager.ExportCardAsString(fullCard));
            data.Add("STC-4.as_json", cardManager.ExportCardAsJson(fullCard));
            data.Add("STC-4.card_id", fullCard.Id);
            data.Add("STC-4.public_key_base64", Bytes.ToString(crypto.ExportPublicKey(fullCard.PublicKey),
                                                               StringEncoding.BASE64));
            foreach (var signature in fullCard.Signatures)
            {
                data.Add($"STC-4.signature_{signature.Signer}_base64", Bytes.ToString(signature.Signature,
                                                                                      StringEncoding.BASE64));
            }

            string apiPublicKeyId;
            string apiPublicKeyBase64;

            var(token, jwtGenerator) = faker.PredefinedToken(
                new VirgilAccessTokenSigner(),
                TimeSpan.FromMinutes(10),
                out apiPublicKeyId,
                out apiPublicKeyBase64);

            data.Add("STC-22.jwt", token.ToString());
            data.Add("STC-22.api_public_key_base64", apiPublicKeyBase64);
            data.Add("STC-22.api_key_id", apiPublicKeyId);


            data.Add("STC-23.api_public_key_base64", apiPublicKeyBase64);
            data.Add("STC-23.api_key_id", apiPublicKeyId);
            data.Add("STC-23.app_id", jwtGenerator.AppId);

            data.Add("STC-23.api_private_key_base64", Bytes.ToString(
                         crypto.ExportPrivateKey(jwtGenerator.ApiKey), StringEncoding.BASE64));

            // STC-10
            var cardKeyPair     = crypto.GenerateKeys();
            var cardIdentity    = faker.Random.AlphaNumeric(10);
            var rawCardContent1 = new RawCardContent()
            {
                CreatedAt = DateTime.UtcNow,
                Identity  = cardIdentity,
                PublicKey = crypto.ExportPublicKey(cardKeyPair.PublicKey),
                Version   = "5.0",
            };
            var rawSignedModel = new RawSignedModel()
            {
                ContentSnapshot = SnapshotUtils.TakeSnapshot(rawCardContent1)
            };

            var signer = new ModelSigner(new VirgilCardCrypto());

            signer.SelfSign(rawSignedModel, cardKeyPair.PrivateKey);


            var keyPair = crypto.GenerateKeys();

            signer.Sign(rawSignedModel, new SignParams()
            {
                SignerPrivateKey = keyPair.PrivateKey,
                Signer           = "extra"
            });
            data.Add("STC-10.private_key1_base64", Bytes.ToString(
                         crypto.ExportPrivateKey(keyPair.PrivateKey), StringEncoding.BASE64));

            var accessTokenGenerator = new JwtGenerator(
                AppSettings.AppId,
                IntegrationHelper.ApiPrivateKey(),
                AppSettings.ApiPublicKeyId,
                TimeSpan.FromMinutes(10),
                new VirgilAccessTokenSigner()
                );
            var accessTokenProvider = Substitute.For <IAccessTokenProvider>();

            accessTokenProvider.GetTokenAsync(Arg.Any <TokenContext>()).Returns(
                accessTokenGenerator.GenerateToken(cardIdentity)
                );
            var validator = new VirgilCardVerifier(new VirgilCardCrypto())
            {
                VerifySelfSignature = true, VerifyVirgilSignature = true
            };

            validator.ChangeServiceCreds(AppSettings.ServicePublicKeyDerBase64);
            var manager = new CardManager(new CardManagerParams()
            {
                CardCrypto          = new VirgilCardCrypto(),
                AccessTokenProvider = accessTokenProvider,
                ApiUrl   = AppSettings.CardsServiceAddress,
                Verifier = validator
            });

            card = await manager.PublishCardAsync(rawSignedModel);

            data.Add("STC-10.as_string", manager.ExportCardAsString(card));


            // STC - 11
            rawSignedModel = faker.PredefinedRawSignedModel(null, false, false, false);
            data.Add("STC-11.as_string", rawSignedModel.ExportAsString());

            // STC - 12
            rawSignedModel = faker.PredefinedRawSignedModel(null, true, false, false);
            data.Add("STC-12.as_string", rawSignedModel.ExportAsString());

            // STC - 14
            rawSignedModel = faker.PredefinedRawSignedModel(null, false, true, false);
            data.Add("STC-14.as_string", rawSignedModel.ExportAsString());

            // STC - 15
            rawSignedModel = faker.PredefinedRawSignedModel(null, false, false, false);
            keyPair        = crypto.GenerateKeys();
            signer.Sign(rawSignedModel, new SignParams()
            {
                SignerPrivateKey = keyPair.PrivateKey,
                Signer           = "self"
            });
            data.Add("STC-15.as_string", rawSignedModel.ExportAsString());

            // STC - 16
            rawSignedModel = faker.PredefinedRawSignedModel(null, true, true, false);
            keyPair        = crypto.GenerateKeys();
            signer.Sign(rawSignedModel, new SignParams()
            {
                SignerPrivateKey = keyPair.PrivateKey,
                Signer           = "extra"
            });
            data.Add("STC-16.as_string", rawSignedModel.ExportAsString());
            data.Add("STC-16.public_key1_base64", Bytes.ToString(
                         crypto.ExportPublicKey(keyPair.PublicKey), StringEncoding.BASE64));

            // STC - 28
            (token, jwtGenerator) = faker.PredefinedToken(
                new VirgilAccessTokenSigner(),
                TimeSpan.FromMinutes(2),
                out apiPublicKeyId,
                out apiPublicKeyBase64);
            data.Add("STC-28.jwt", token.ToString());
            data.Add("STC-28.jwt_identity", token.BodyContent.Identity);
            data.Add("STC-28.jwt_app_id", token.BodyContent.AppId);
            data.Add("STC-28.jw_issuer", token.BodyContent.Issuer);
            data.Add("STC-28.jwt_subject", token.BodyContent.Subject);
            data.Add("STC-28.jwt_additional_data", Configuration.Serializer.Serialize(token.BodyContent.AdditionalData));
            data.Add("STC-28.jwt_expires_at", Configuration.Serializer.Serialize(token.BodyContent.ExpiresAt));
            data.Add("STC-28.jwt_issued_at", Configuration.Serializer.Serialize(token.BodyContent.IssuedAt));
            data.Add("STC-28.jwt_algorithm", token.HeaderContent.Algorithm);
            data.Add("STC-28.jwt_api_key_id", token.HeaderContent.KeyId);
            data.Add("STC-28.jwt_content_type", token.HeaderContent.ContentType);
            data.Add("STC-28.jwt_type", token.HeaderContent.Type);
            data.Add("STC-28.jwt_signature_base64", Bytes.ToString(token.SignatureData, StringEncoding.BASE64));


            // STC - 29
            (token, jwtGenerator) = faker.PredefinedToken(
                new VirgilAccessTokenSigner(),
                TimeSpan.FromDays(365),
                out apiPublicKeyId,
                out apiPublicKeyBase64);
            data.Add("STC-29.jwt", token.ToString());
            data.Add("STC-29.jwt_identity", token.BodyContent.Identity);
            data.Add("STC-29.jwt_app_id", token.BodyContent.AppId);
            data.Add("STC-29.jw_issuer", token.BodyContent.Issuer);
            data.Add("STC-29.jwt_subject", token.BodyContent.Subject);
            data.Add("STC-29.jwt_additional_data", Configuration.Serializer.Serialize(token.BodyContent.AdditionalData));
            data.Add("STC-29.jwt_expires_at", Configuration.Serializer.Serialize(token.BodyContent.ExpiresAt));
            data.Add("STC-29.jwt_issued_at", Configuration.Serializer.Serialize(token.BodyContent.IssuedAt));
            data.Add("STC-29.jwt_algorithm", token.HeaderContent.Algorithm);
            data.Add("STC-29.jwt_api_key_id", token.HeaderContent.KeyId);
            data.Add("STC-29.jwt_content_type", token.HeaderContent.ContentType);
            data.Add("STC-29.jwt_type", token.HeaderContent.Type);
            data.Add("STC-29.jwt_signature_base64", Bytes.ToString(token.SignatureData, StringEncoding.BASE64));


            // STC - 34
            keyPair = crypto.GenerateKeys();
            var rawCardContent = new RawCardContent()
            {
                CreatedAt = DateTime.UtcNow,
                Identity  = "test",
                PublicKey = crypto.ExportPublicKey(keyPair.PublicKey),
                Version   = "5.0"
            };

            model = new RawSignedModel()
            {
                ContentSnapshot = SnapshotUtils.TakeSnapshot(rawCardContent)
            };

            signer.SelfSign(
                model, keyPair.PrivateKey, new Dictionary <string, string>()
            {
                { "info", "some_additional_info" }
            }
                );

            data.Add("STC-34.private_key_base64", Bytes.ToString(
                         crypto.ExportPrivateKey(keyPair.PrivateKey), StringEncoding.BASE64));
            data.Add("STC-34.public_key_base64", Bytes.ToString(
                         crypto.ExportPublicKey(keyPair.PublicKey), StringEncoding.BASE64));
            data.Add("STC-34.self_signature_snapshot_base64",
                     Bytes.ToString(model.Signatures.First().Snapshot, StringEncoding.BASE64));
            data.Add("STC-34.content_snapshot_base64",
                     Bytes.ToString(
                         SnapshotUtils.TakeSnapshot(rawCardContent), StringEncoding.BASE64));
            data.Add("STC-34.as_string", model.ExportAsString());

            System.IO.File.WriteAllText(AppSettings.OutputTestDataPath,
                                        Configuration.Serializer.Serialize(data));
        }
示例#23
0
        public AuthService(IAuthDbService authDbService, IUserDbService <TUserModel> userService, JwtGenerator jwtGenerator, IMapper mapper)
        {
            _authDbService = authDbService ?? throw new ProjectArgumentException(
                                       GetType(),
                                       nameof(AuthService <TUserModel>),
                                       nameof(authDbService),
                                       null);

            _userDbService = userService ?? throw new ProjectArgumentException(
                                       GetType(),
                                       nameof(AuthService <TUserModel>),
                                       nameof(userService),
                                       null);

            _jwtGenerator = jwtGenerator ?? throw new ProjectArgumentException(
                                      GetType(),
                                      nameof(AuthService <TUserModel>),
                                      nameof(jwtGenerator),
                                      null);

            _mapper = mapper ?? throw new ProjectArgumentException(
                                GetType(),
                                nameof(AuthService <TUserModel>),
                                nameof(mapper),
                                null);
        }
示例#24
0
        /// <summary>
        /// creating a new account
        /// </summary>
        /// <param name="user"></param>
        /// <returns> their username, JWT token and ID </returns>
        public async Task <AuthenticatedUser> SignUp(Strength.DB.User user)
        {
            // checking if username exists
            var checkUser = await _context.Users
                            .FirstOrDefaultAsync(u => u.Username.Equals(user.Username) || u.Email.Equals(user.Email));

            if (checkUser != null)
            {
                if (checkUser.Username == user.Username)
                {
                    throw new UsernameAlreadyExistsException("Username already exists");
                }
                else
                {
                    throw new EmailAlreadyExistsException("Email already exists");
                }
            }

            // checking if email is legitimate
            bool isEmail = Regex.IsMatch(user.Email, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z", RegexOptions.IgnoreCase);

            if (!isEmail)
            {
                throw new Exception("Invalid email");
            }

            // checking if password is strong enough
            var   regexPasswordCheck = @"^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})";
            Match match = Regex.Match(user.Password, regexPasswordCheck);

            if (!match.Success)
            {
                throw new Exception("Password is too weak");
            }

            // hashing password
            user.Password = _passwordHasher.HashPassword(user.Password);

            // generating random ID
            Random ran           = new Random();
            string id            = ran.Next(100, 2048).ToString();
            Int64  unixTimestamp = (Int64)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;

            id += unixTimestamp.ToString();

            for (int i = 0; i < 2; i++)
            {
                id += ran.Next(1000, 3048).ToString();
            }
            byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(id);

            // assigning generated ID
            user.Id = Convert.ToBase64String(toEncodeAsBytes);

            // save changes
            await _context.AddAsync(user);

            await _context.SaveChangesAsync();

            return(new AuthenticatedUser
            {
                Username = user.Username,
                Token = JwtGenerator.GenerateUserToken(user.Username),
                Id = user.Id
            });
        }
示例#25
0
 public RegisterUserCommandHandler(ILogger <RegisterUserCommandHandler> logger, IUserRepository users, JwtGenerator jwtGenerator)
 {
     _jwtGenerator = jwtGenerator;
     _users        = users;
     _logger       = logger;
 }
示例#26
0
 public UserController(UserManager <IdentityUser> userManager, IOptions <JwtConfig> jwtConfig, JwtGenerator jwtGenerator)
 {
     _userManager  = userManager;
     _jwtConfig    = jwtConfig.Value;
     _jwtGenerator = jwtGenerator;
 }
        public DifferencesQuery(
            IUserService userService,
            IQuestionService questionService,
            ILikeRecordService likeRecordService,
            IOptions <JwtConfig> options)
        {
            Name = "DifferencesQuery";

            #region User
            FieldAsync <ListGraphType <UserType> >(
                "topUsers",
                resolve: context => userService.GetTopReputationUsers(1));

            FieldAsync <AuthResponseType>(
                "auth",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "type"
            },
                    new QueryArgument <NonNullGraphType <StringGraphType> > {
                Name = "code"
            }),
                resolve: context =>
            {
                try
                {
                    var type = context.GetArgument <string>("type");
                    var code = context.GetArgument <string>("code");
                    var user = userService.GetUser(type, code);
                    return(new UserWithTokenModel
                    {
                        User = user,
                        AccessToken = JwtGenerator.Generate(options.Value, user)
                    });
                }
                catch (DefinedException ex)
                {
                    context.Errors.Add(ex);
                    return(null);
                }
            });
            #endregion

            #region Question
            FieldAsync <ListGraphType <QuestionType> >(
                "questions",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <CriteriaInputType> > {
                Name = "criteria"
            }
                    ),
                resolve: context =>
            {
                var criteria = context.GetArgument <CriteriaModel>("criteria");
                return(questionService.GetQuestionsByCriteria(criteria));
            });

            FieldAsync <IntGraphType>(
                "questionCount",
                arguments: new QueryArguments(new QueryArgument <NonNullGraphType <CriteriaInputType> > {
                Name = "criteria"
            }),
                resolve: context =>
            {
                var criteria = context.GetArgument <CriteriaModel>("criteria");
                return(questionService.GetQuestionCountByCriteria(criteria));
            });

            FieldAsync <QuestionType>(
                "question",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "id"
            }
                    ),
                resolve: context =>
            {
                var questionId = context.GetArgument <int>("id");
                return(questionService.GetQuestion(questionId));
            });

            FieldAsync <ListGraphType <AnswerType> >(
                "questionAnswers",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "questionId"
            }
                    ),
                resolve: context =>
            {
                var questionId = context.GetArgument <int>("questionId");
                return(questionService.GetAnswersByQuestionId(questionId));
            });

            FieldAsync <ListGraphType <AnswerLikeType> >(
                "answerLikedByQuestion",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "questionId"
            }
                    ),
                resolve: context =>
            {
                var questionId = context.GetArgument <int>("questionId");
                return(likeRecordService.GetRecordsByQuestion(questionId));
            });

            FieldAsync <AnswerLikeType>(
                "answerLikedByAnswer",
                arguments: new QueryArguments(
                    new QueryArgument <NonNullGraphType <IntGraphType> > {
                Name = "answerId"
            }
                    ),
                resolve: context =>
            {
                var answerId = context.GetArgument <int>("answerId");
                return(likeRecordService.GetRecordByAnswer(answerId));
            });
            #endregion

            FieldAsync <ListGraphType <CategoryGroupType> >(
                "categoryDefinition",
                resolve: context => CategoryDefinition.CategoryGroups);
        }
示例#28
0
        public void CardManager_Should_RaiseExceptionIfGetsCardWithDifferentId()
        {
            // STC-34
            var verifier = Substitute.For <ICardVerifier>();

            verifier.VerifyCard(Arg.Any <Card>()).Returns(true);
            var crypto         = new VirgilCrypto();
            var keyPair        = faker.PredefinedKeyPair();
            var rawCardContent = new RawCardContent()
            {
                CreatedAt = DateTime.UtcNow,
                Identity  = "test",
                PublicKey = crypto.ExportPublicKey(keyPair.PublicKey),
                Version   = "5.0"
            };
            var model = new RawSignedModel()
            {
                ContentSnapshot = SnapshotUtils.TakeSnapshot(rawCardContent)
            };

            var signer = new ModelSigner(new VirgilCardCrypto());

            signer.SelfSign(
                model, keyPair.PrivateKey, new Dictionary <string, string>()
            {
                { "info", "some_additional_info" }
            }
                );
            var signCallBack = Substitute.For <Func <RawSignedModel, Task <RawSignedModel> > >();

            signCallBack.Invoke(Arg.Any <RawSignedModel>()).Returns(args => (RawSignedModel)args[0]);
            var jwtGenerator = new JwtGenerator(
                AppSettings.AppId,
                IntegrationHelper.ApiPrivateKey(),
                AppSettings.ApiPublicKeyId,
                TimeSpan.FromMinutes(10),
                new VirgilAccessTokenSigner()
                );
            var accessTokenProvider = Substitute.For <IAccessTokenProvider>();
            var identity            = faker.Random.AlphaNumeric(20);
            var token = jwtGenerator.GenerateToken(identity);

            accessTokenProvider.GetTokenAsync(Arg.Any <TokenContext>()).Returns(
                token
                );
            var cardId = faker.CardId();
            var client = Substitute.For <ICardClient>();
            Func <Task <Tuple <RawSignedModel, bool> > > stub = async() =>
            {
                return(new Tuple <RawSignedModel, bool>(model, false));
            };

            client.GetCardAsync(Arg.Any <string>(), Arg.Any <string>()).Returns(stub.Invoke());

            var manager = new CardManager(new CardManagerParams()
            {
                CardCrypto          = new VirgilCardCrypto(),
                AccessTokenProvider = accessTokenProvider,
                SignCallBack        = signCallBack,
                Verifier            = verifier,
                ApiUrl = AppSettings.CardsServiceAddress
            }
                                          )
            {
                Client = client
            };

            Assert.ThrowsAsync <CardVerificationException>(async() => await manager.GetCardAsync(cardId));
        }
示例#29
0
        public async Task <Response <AuthResponseDto> > Login(AuthRequestDto authRequestDto)
        {
            AuthRequestEntities authRequest = _mapper.Map <AuthRequestEntities>(authRequestDto);
            var    response = new Response <AuthResponseDto>();
            string todo     = null;

            try
            {
                if (authRequestDto == null)
                {
                    response.IsSuccess   = false;
                    response.IsWarning   = true;
                    response.CodigoError = "0";
                    response.Message     = "Envio de parametros inválido,intente denuevo.";
                    return(response);
                }
                else if (string.IsNullOrEmpty(authRequestDto.Username) ||
                         string.IsNullOrEmpty(authRequestDto.Password))
                {
                    response.IsSuccess   = false;
                    response.IsWarning   = true;
                    response.CodigoError = "0";
                    response.Message     = "Envio de parametros inválido,intente denuevo.";
                    return(response);
                }

                //valida el usuario y password
                var responseData = await _usuarioDomain.Login(authRequest);

                response.Data = _mapper.Map <AuthResponseDto>(responseData);
                var ver = Convert.ToInt32(todo);

                if (response.Data == null)
                {
                    response.IsSuccess   = false;
                    response.IsWarning   = true;
                    response.CodigoError = "0";
                    response.Message     = "Usuario y/o contraseña incorrecta.";
                    return(response);
                }
                else
                {
                    response.Data.Token = JwtGenerator.CreateToken(_configuration,
                                                                   response.Data.UserName);
                    response.Message = "Inicio de sesión correctamente.";

                    //guardar sesion de usuario
                    var sesion = new SesionUsuarioDto
                    {
                        IdUser    = response.Data.Id,
                        Token     = response.Data.Token,
                        DateStart = DateTime.Now,
                        Status    = 1
                    };
                    var sesionUsuarioEntities = _mapper.Map <SesionUsuarioEntities>(sesion);
                    var responseSesion        = await _usuarioDomain.GuardarSesion(sesionUsuarioEntities);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(response);
        }
示例#30
0
        public void CardManager_Should_RaiseExceptionIfGetsInvalidCard()
        {
            // STC-13
            var verifier = Substitute.For <ICardVerifier>();

            verifier.VerifyCard(Arg.Any <Card>()).Returns(false);

            var signCallBack = Substitute.For <Func <RawSignedModel, Task <RawSignedModel> > >();

            signCallBack.Invoke(Arg.Any <RawSignedModel>()).Returns(args => (RawSignedModel)args[0]);
            var jwtGenerator = new JwtGenerator(
                faker.AppId(),
                IntegrationHelper.ApiPrivateKey(),
                AppSettings.ApiPublicKeyId,
                TimeSpan.FromMinutes(10),
                new VirgilAccessTokenSigner()
                );
            var accessTokenProvider = Substitute.For <IAccessTokenProvider>();
            var identity            = faker.Random.AlphaNumeric(20);
            var token = jwtGenerator.GenerateToken(identity);

            accessTokenProvider.GetTokenAsync(Arg.Any <TokenContext>()).Returns(
                token
                );
            var model = faker.PredefinedRawSignedModel(null, true, true, true);

            var client = Substitute.For <ICardClient>();
            Func <Task <Tuple <RawSignedModel, bool> > > getStub = async() =>
            {
                return(new Tuple <RawSignedModel, bool>(model, false));
            };
            Func <Task <RawSignedModel> > publishStub = async() =>
            {
                return(model);
            };
            Func <Task <IEnumerable <RawSignedModel> > > searchStub = async() =>
            {
                return(new List <RawSignedModel>()
                {
                    model
                });
            };

            client.GetCardAsync(Arg.Any <string>(), Arg.Any <string>()).Returns(getStub.Invoke());
            client.PublishCardAsync(Arg.Any <RawSignedModel>(), Arg.Any <string>()).Returns(publishStub.Invoke());
            client.SearchCardsAsync(Arg.Any <string>(), Arg.Any <string>()).Returns(searchStub.Invoke());

            var cardId             = faker.CardId();
            var searchCardIdentity = faker.Random.AlphaNumeric(20);
            var manager            = new CardManager(new CardManagerParams()
            {
                CardCrypto          = new VirgilCardCrypto(),
                AccessTokenProvider = accessTokenProvider,
                SignCallBack        = signCallBack,
                Verifier            = verifier,
                ApiUrl = AppSettings.CardsServiceAddress
            }
                                                     )
            {
                Client = client
            };

            Assert.Throws <CardVerificationException>(() => manager.ImportCardFromJson(model.ExportAsJson()));
            Assert.Throws <CardVerificationException>(() => manager.ImportCardFromString(model.ExportAsString()));
            Assert.ThrowsAsync <CardVerificationException>(async() => await manager.GetCardAsync(cardId));
            Assert.ThrowsAsync <CardVerificationException>(async() => await manager.PublishCardAsync(model));
            Assert.ThrowsAsync <CardVerificationException>(async() => await manager.SearchCardsAsync(searchCardIdentity));
            Assert.Throws <CardVerificationException>(() => manager.ImportCard(model));
        }