/// <summary> /// Initialize entities for scenario /// </summary> public override void InitializeEntities() { //Inizializzazione base base.InitializeEntities(); //Aggiungo l'amministrator Users.Add(new User { Id = Guid.NewGuid().ToString("D"), UserName = "******", Email = "*****@*****.**", IsEnabled = true, IsLocked = false, PersonName = "Mario", PersonSurname = "Rossi", PasswordHash = ShaProcessor.Sha256Encrypt("password"), LastAccessDate = DateTime.UtcNow.AddDays(-1), PhotoBinary = new byte[] { } }); //Creo l'audience corrente (Nativa) Audiences.Add(new Audience { Id = Guid.NewGuid().ToString("D"), Name = "Sample Resource", ClientId = "sample.resource", ClientSecret = "_IqrVEUhwO19o9nQ-9DtOfzYAL5THZrGcWgCO1-Xa0k", HasAdministrativeAccess = false, IsEnabled = true, IsNative = true, AllowedOrigin = "*", RefreshTokenLifeTime = 30 }); }
/// <summary> /// Initialize entities for scenario /// </summary> public override void InitializeEntities() { //Aggiungo l'amministrator Users.Add(new User { Id = Guid.NewGuid().ToString("D"), UserName = "******", Email = "*****@*****.**", IsEnabled = true, IsLocked = false, PersonName = "Digital", PersonSurname = "ZenProgramming", PasswordHash = ShaProcessor.Sha256Encrypt("password"), LastAccessDate = DateTime.UtcNow.AddDays(-1), PhotoBinary = new byte[] {} }); //Creo l'audience corrente (Nativa) Audiences.Add(new Audience { Id = Guid.NewGuid().ToString("D"), Name = "Heimdallr Api", ClientId = "heimdallr.api", ClientSecret = "IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw", HasAdministrativeAccess = true, IsEnabled = true, IsNative = true, AllowedOrigin = "*", RefreshTokenLifeTime = 30 }); }
public User SignIn(string userName, string password) { //Recuperare utente con username indicata da database User user = GetUserByUserName(userName); //Se non ho utente, esco if (user == null) { return(null); } //Se è disabilitato, esco if (!user.IsEnabled) { return(null); } //Enconding della password passata var encondedPassword = ShaProcessor.Sha256Encrypt(password); //Se le password non sono corrette, null //altrimenti emetto l'utente return(encondedPassword == user.PasswordHash ? user : null); }
/// <summary> /// Seed on provided DbContext initialization data /// </summary> /// <param name="instance">DbContext instance</param> public void Seed(HeimdallrDbContext instance) { //Arguments validation if (instance == null) { throw new ArgumentNullException(nameof(instance)); } //If has NO users, create if (!instance.Users.Any(u => u.UserName == "Administrator")) { //Aggiungo l'amministrator instance.Users.Add(new User { Id = Guid.NewGuid().ToString("D"), UserName = "******", Email = "*****@*****.**", IsEnabled = true, IsLocked = false, PersonName = "Digital", PersonSurname = "ZenProgramming", PasswordHash = ShaProcessor.Sha256Encrypt("password"), LastAccessDate = DateTime.UtcNow.AddDays(-1), PhotoBinary = new byte[] { } }); //Save changes instance.SaveChanges(); } //If has NO audience, create if (!instance.Audiences.Any(a => a.ClientId == "heimdallr.api")) { //Creo l'audience corrente (Nativa) instance.Audiences.Add(new Audience { Id = Guid.NewGuid().ToString("D"), Name = "Heimdallr Api", ClientId = "heimdallr.api", ClientSecret = "IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw", HasAdministrativeAccess = true, IsEnabled = true, IsNative = true, AllowedOrigin = "*", RefreshTokenLifeTime = 30 }); //Save changes instance.SaveChanges(); } }
public override void InitializeEntities() { var user = new User { UserName = "******", PasswordHash = ShaProcessor.Sha256Encrypt("P@ssw0rd"), FirstName = "Mauro", LastName = "Bussini", Email = "*****@*****.**", IsAdministrator = true, IsEnabled = true }; this.Push(e => e.Users, user); }
/// <summary> /// Initialize elements /// </summary> /// <param name="elements">Empty elements to initialize</param> protected override void Initialize(IList <Credential> elements) { //Validatione argomenti if (elements == null) { throw new ArgumentNullException(nameof(elements)); } //Accodo gli elementi elements.Add(new Credential { Key = "*****@*****.**", Password = ShaProcessor.Sha1Encrypt("ABC") }); elements.Add(new Credential { Key = "*****@*****.**", Password = ShaProcessor.Sha1Encrypt("CDE") }); elements.Add(new Credential { Key = "*****@*****.**", Password = ShaProcessor.Sha1Encrypt("FGH") }); }
/// <summary> /// Sign-in using credentials and return user /// </summary> /// <param name="userName">UserName</param> /// <param name="password">Password</param> /// <returns>Returns signed-in result</returns> public SignInResult SignIn(string userName, string password) { //Validazione argomenti if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password)) { return(null); } //Recupero l'utente tramite username var user = GetUserByUserName(userName); //Se non è stato tovato, esco if (user == null) { return(null); } //Calcolo l'hash delle credenziali passate string hash = ShaProcessor.Sha256Encrypt(password); //Se NON corrisponde con quello su user, esco if (!hash.Equals(user.PasswordHash)) { return(null); } //TODO: Blocco l'account se ci sono le condizioni (es. troppi tentativi ravvicinati) //LockAccountOnConditions(user); //Eseguo il salvataggio dell'ultimo accesso, precedente a //questo, perchè l'operazione di sign-in a tutti gli effetti //esegue un aggiornamento di questo campo. Ma è corretto //che nel risultato la data di emissione sia quella precedente //in modo che le informazioni mostrate all'utente siano in qualche //modo orientate a rendere l'utente stesso consapevole del //timing con cui è stato fatto l'ultimo accesso. Questa cosa gli //potrebbe permettere di verificare accessi fraudolenti al sistema var previousAccessDate = user.LastAccessDate; //Aggiorno la data di ultimo accesso user.LastAccessDate = DateTime.UtcNow; var validations = SaveEntity(user, _UserRepository); if (validations.Count > 0) { throw new InvalidOperationException($"Validation of user failed: {validations.ToValidationSummary()}"); } //TODO: Se l'account è locked, verifico le condizioni di sblocco e lo sblocco //UnlockAccountOnConditions(user); //Imposto il provider interno di sign-in const string InternalSignInProvider = "default"; //Eseguo la composizione ed emissione del result return(new SignInResult { UserName = user.UserName, Email = user.Email, PersonName = user.PersonName, PersonSurname = user.PersonSurname, IsEnabled = user.IsEnabled, IsLocked = user.IsLocked, LastAccessDate = previousAccessDate, SignInProvider = InternalSignInProvider }); }